1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
很明显 new用到了Person类,当然会先把该类加载到内存,并新创建一个该类对象;
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
java类首次装入时,会对静态成员变量或方法进行一次初始化;
3,在堆内存中开辟空间,分配内存地址。
new创建对象时,在堆内存中开辟空间,给该对象分配内存地址;
4,在堆内存中建立对象的特有属性。并进行默认初始化。
在堆内存中建立(copy)对象的特有属性 假设有(string name,int age)然后进行初始化;就是在定义Person类时,是否对对象的属性进行赋值,没有则是默认值;完整的将Person类和其属性 在对内存中 又copy一个出来;
5,对属性进行显示初始化。
new Person("zhangsan",20);显式初始化就是将新创建的类所带的属性参数传入原先定义的类Person中,然后进行赋值:name=“zhangsan”;age=20 然后生成一个新类 Person 属性已被初始化。
至此 一个 全新的类 Person 就出现在对内存中 且已经被显式初始化;
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
如果定义的类中有构造代码块和构造函数的话,进行6、7步的操作;
8,将内存地址付给栈内存中的p变量。
Person p = new Person("zhangsan",20);
然后将刚才新创建的类Person在对内存中的地址付给p变量;
|