面向对象之静态块,动态块执行

 今天我们就来看一个示例,看看在动态创建对象的时候是先执行那部分的。

            

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');

}

下面我们来调试一下

首先 它先进入的是静态块

   

其次

   

再次动态块


最后构造函数


再执行第二次的时候,它就没有再进入静态块了,而是动态属性,动态块,构造函数

这是为什么呢?

解析:首先执行的是,静态块,静态块是类加载的时候才进行。只执行一次静态块,静态块是类创建之前加载的。静态块执行完毕后,它开始为所要创建的对象分配内存,为属性分配,成员方法分配,分配完后,在执行动态块,动态块执行完毕后最后在执行构造函数(自己调用的构造函数)。构造函数是最后执行的。

 

猜你喜欢

转载自blog.csdn.net/goforitaaa/article/details/80957270
今日推荐