public class Demo {
private String name="haha";
private int age;
private static String country="cn";
static {
System.out.println("Demo.class启动!!!");
}
{
System.out.println("默认的成员变量的值为:"+"name="+name+" "+"age="+age);
}
Demo (String name,int age){
this.name=name;
this.age=age;
}
}
调用:Demo d=new Demo("张三",34);
执行如图所示:
这句话都做了什么事情?
1:因为new用到了Demo.class,所以会先找到Demo.class文件并加载到内存
2.执行该类中的static代码块(静态优先于对象),如果有的话,给Demo.class类进行初始化
3.在堆内存中开辟空间,分配内存单元
4.在堆内存中建立对象的特有属性,并进行默认初始化(比如String类型,初始化为null.int类型初始化为0)
5.对属性进行显式初始化(指成员变量若已初始化,例如:private String name="haha";)
6.对对象进行构造代码块初始化
7.对对象进行对应的构造函数初始化
8将内存地址赋给栈内存地址中的p变量