java父子类中静态代码块构造器执行顺序
如题:执行结果放最后 可以先自行思考
class B {
public B(String b){
System.out.println("父类B的构造函数");
}
static {
System.out.println("父类B的中的静态代码块");
}
{
System.out.println("父类B的中的非静态代码块 sya()");
}
}
public class A extends B {
public A() {
super("B");
System.out.println("子类A的构造函数");
}
static {
System.out.println("子类A的中的静态代码块");
}
{
System.out.println("子类A的中的非静态代码块 sya()1");
}
public static void main(String[] args) {
A a = new A();
System.out.println("A!");
A a2 = new A();
System.out.println("启动完成");
}
}
知识点:
静态代码块
静态代码块是在Java中特有的一种代码块,在类被加载的时候就会执行,只执行一次,并且优先于主方法。它主要用于初始化静态变量。
非静态代码块
非静态代码块的作用和构造器一样,用于初始化实例变量的等操作,所以也称为构造代码块。
非静态代码块的执行特点:所有非静态代码块中代码都是在创建对象时自动执行,一定是先于构造器的代码执行,并且每次构造该类时都会被执行一次。
父子类顺序
父类优先于子类被加载
注意:当父类中没有无参构造器时,在子类构造器中需使用super关键字来调用父类有参构造器
================最后执行顺序如下==============
总结一下:
被static修饰的代码块,是属于当前类的信息,是用来初始化类的信息。
所以①静态代码块的加载是 优先于 父子类的实例代码块和构造方法;
其次②父类加载顺序 优先于 子类加载顺序;
然后③实例代码块 优先于 构造方法;