JAVA 测试III

记录一下遇见和做过的JAVA编程题...


JAVA 测试I http://www.jianshu.com/p/76b36d18844d
JAVA 测试II http://www.jianshu.com/p/e7f7d29b185a
JAVA 测试III http://www.jianshu.com/p/64d3495989a5

1

下面这段代码输出什么?

class A {
    static int a = 1;
    static {
        System.out.println(a);
    }
    public A() {
        System.out.println(a);
    }
}
class B extends A {
    static int a = 2;
    static {
        System.out.println(a);
    }
    public B() {
        System.out.println(a);
    }
}
public class Test {
    public static void main(String args[]) {
        B a = new B();
    }
}

解析: 继承关系下, 不管是把子类实例化,还是调用子类的静态方法等, 一定是先初始化父类的静态块,在初始化子类的静态块, 然后是父类的非静态块,子类的非静态块, 再然后 父类的构造方法,子类的构造方法.
故输出 ** 1 2 1 2**

你可能感兴趣的:(JAVA 测试III)