java 对象的初始化过程
PersonDemo p=new PersonDemo("lisi",20);这句话都做了什么事情?
- 因为new用到了PersonDemo.class,所以会先找到PersonDemo.class文件并加载到内存中。
- 执行该类中的静态成员和static代码块,如果有的话,给persondemo.class类进行初始化。
- 在堆内存中开辟空间,分配内存地址。
- 在堆内存中建立对象的特有属性,并进行默认初始化。
- 对属性进行显示初始化。
- 对对象进行构造代码块初始化。
- 对对象进行对应的构造函数初始化。
- 将内存地址付给栈内存中的p变量。
public class PersonDemo { private String name="zhang"; private int age; private static String country = "cn";
//静态代码块,对PersonDemo.class类进行初始化 static { System.out.println("静态代码块" + country); }
//构造代码块,对对象进行初始化 { System.out.println("构造代码块" + this.name); } //构造方法 public PersonDemo(String name, int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public static void show() { System.out.println("静态方法" + country); } }