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修饰的代码块,是属于当前类的信息,是用来初始化类的信息。

所以①静态代码块的加载是        优先于        父子类的实例代码块构造方法;

其次②父类加载顺序        优先于        子类加载顺序;

然后③实例代码块        优先于        构造方法;

posted @ 2023-10-11 01:25  南方的猫  阅读(25)  评论(0编辑  收藏  举报  来源