Java对象初始化过程
先声明对象:
class Student {
String name = "Alice";//显示初始化
int age = 18; //显示初始化
public Student() {
name = "Bob"; //构造方法初始化
age = 24 ; //构造方法初始化
}
}
调用时:
Student s = new Student();
编译期间,会生成Student.class字节码文件。
初始化时:
1、类加载器ClassLoader,加载Student.class字节码到内存;
2、在栈里面为变量s申请一个空间,用来声明s;
3、new的时候,在堆内开辟空间。然后,开始进行默认初始化,String类型默认给null,int类型默认给0等。默认初始化后,开始进行显示初始化,比如成员变量里name默认值为Alice,所以这时会初始化name为Alice。
3、执行Student()构造方法,构造方法进栈,进行构造方法初始化
4、执行构造方法初始化,构造方法执行完毕后出栈,把堆内的对象物理地址,复制给栈内的s,也就是s存放的是对象的引用(物理地址)。
5、执行Student里面的方法时,方法进栈,方法里隐式的this指向堆内存空间