创建对象过程
我们知道:程序运行最开始,编译器会将.java文件编译为.class文件
举例:
1 | class Animal { |
对上面new一个对象(以Animal类为例)流程解释如下(辅助图中解释一块看):
- 当需要new一个Animal对象时,首先看方法区中,有无Animal.class的模板:
- 若无,则通过类加载器将Animal.class加载进方法区中;同时,Animal中的静态成员需要被加载进静态方法区中。
- 若有,直接进行下一步。
- new一个对象,将对象存放在堆中
- 是否需要一个该对象的引用变量。如果需要,就在栈的栈顶生成一个该对象的引用变量
注意:
①上面的Animal1和Animal2由于是局部变量,所以存储在栈中;
②而name、age是成员变量,所以跟随着对象存储在堆中
扩展
在上面的例子中,我们还涉及到了常量池的概念,有关常量池的概念,见博客:java中常量池的理解