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变量; 
 
 
 |