Java继承和静态-加载顺序

来源:互联网 发布:学生资助学生数据重复 编辑:程序博客网 时间:2024/06/04 00:22
class A {    static int cnt = 0;    static {        System.out.println("a()");    }    int a = 1;    A() {        System.out.println("A()");        System.out.println(cnt);    }}class B extends A {    static {        System.out.println("b()");    }    int b = 10;    B() {        System.out.println("B()");        cnt++;        System.out.println(cnt);    }}class C extends B {    static {        System.out.println("c()");    }    int c = 1000;    C() {        cnt++;        System.out.println("C()");        System.out.println(cnt);    }}class Demo {    public static void main(String[] args) {    C c1 = new C();    System.out.println();    B b1 = new B();    System.out.println();    A a1 = new A();}}


输出结果


        static静态的特性是只加载一次,构造一个类对象时,先按照父类(最原始的父类开始依次向下)-子类的顺序先加载类,类的成员变量和方法,这里的类方法为静态,所以在下面构造对象时,不会再加载,只加载一次。

        加载完模板后,还是按照这个顺序调用构造函数,没有特别指明则是调用默认的。

        注意这里的cnt在A的构造函数上没有自加,凡是调用B和C的构造函数,都会自加,调用父类也同样


0 0
原创粉丝点击