这段代码的输出结果

class A {

    static {
        System.out.print("1");
    }    public A() {
        System.out.print("2");
    }
}class B extends A{

    static {
        System.out.print("a");
    }    public B() {
        System.out.print("b");
    }
}public class Hello {

    public static void main(String[] args) {
        A ab = new B();
        ab = new B();
    }

}

为什么是1a2b2b,能说一说原理吗?

JHsssss
浏览 1378回答 2
2回答

Home_羁绊

执行顺序:静态代码块(类加载的时候执行,先父类后子类 ) -->构造代码块(先父类后子类 ) -->构造函数 (先父类后子类 )

望远

像一楼说的静态代码块只会被执行一次(类加载的时候执行静态代码块),实例化子类的时候会先实例化父类,说的清楚一点就是,具体步骤1,先加载父类,,2。加载子类,3.实例化父类,4,实例化子类;所以A ab = new B(); //输出 1 a 2 b  ;但是静态代码块只会被执行一次,所以 ab = new B(); //输出 2 b
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java