今天我们就来看一个示例,看看在动态创建对象的时候是先执行那部分的。
public class Student {
private int no = 0;
private String name;
private char sex;
//先初始化静态块
static{
System.out.println("lala");
}
{
System.out.println("hello World");
}
public Student(int no, String name, char sex) {
this.no = no + 1;
this.name = name;
this.sex = sex;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
}
测试类
@Test
public void test() {
Student s = new Student(21,"zhansgan",'M');
Student s1 = new Student(32,"lisi",'F');
}
下面我们来调试一下
首先 它先进入的是静态块
其次
再次动态块
最后构造函数
再执行第二次的时候,它就没有再进入静态块了,而是动态属性,动态块,构造函数
这是为什么呢?
解析:首先执行的是,静态块,静态块是类加载的时候才进行。只执行一次静态块,静态块是类创建之前加载的。静态块执行完毕后,它开始为所要创建的对象分配内存,为属性分配,成员方法分配,分配完后,在执行动态块,动态块执行完毕后最后在执行构造函数(自己调用的构造函数)。构造函数是最后执行的。