静态代码块执行顺序

static标明的变量、方法、代码块都属于类所有,仅在类加载时进行唯一一次初始化。

1.不管静态成员变量声明语句的实际位置在哪,当第一次加载类的时候都会首先对它初始化缺省值(0,false,null)。

2.即使静态成员变量声明中使用了显式初始化语句,第一次加载类的时候也会把它初始化缺省值。

3.对于静态成员变量的显示初始化语句和静态初始化块,按照在中代码出现的先后顺序执行。

当构造类实例时候,会先对实例成员变量初始化缺省值,然后执行初始化块,然后执行构造方法

a.如同1中一样,如果实例成员变量的显式初始化语句,程序仍然是先将该成员变量初始化为缺省值,然后按照代码在类中出现的先后顺序执行初始化或者初始化块。

b.在进入构造方法后,如果构造方法第一句是使用this,调用另一个构造方法的话,则先执行另一个构造方法,然后再执行本构造方法的方法体。

public class Parent {

public void test() {

A = 3;
System.out.println("test1方法" + A);
}
static {
System.out.println("Parent 静态代码块执行");
A = 2;
}
public static int A =1;
public Parent(){
System.out.println("Parent构造方法执行");
}
}

public class Son extends Parent {

public static int B = A;

static {

System.out.println("Son静态代码块执行");

}

public Son() {

System.out.println("Son构造方法执行");

}

}

public class Hello {

public static void main(String[] args) {
Parent parent1 = new Parent();
Parent parent2 = new Son();
Son parent3 = new Son();
}
}

1.实例化parent中静态代码块、方法、变量,按照顺序一个一个来,然后才是构造方法。

2.实例化son,父类引用指向子类对象,先执行父类的静态,然后是子类静态,然后父类构造方法,然后是子类构造方法

3.实例化son,执行son中构造方法,因为上面已经执行完静态,静态仅在执行一次。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容