美文网首页Android开发
Java代码块与构造方法等执行的先后顺序

Java代码块与构造方法等执行的先后顺序

作者: 6db2cd5e23ce | 来源:发表于2016-01-23 23:12 被阅读1172次

一共3个类:ABC
其中AB的父类,C无继承仅作为输出

A类:

public class A {

    static {
        Log.i("HIDETAG", "A静态代码块");
    }

    private static C c = new C("A静态成员");
    private  C c1 = new C("A成员");

    {
        Log.i("HIDETAG", "A代码块");
    }

    static {
        Log.i("HIDETAG", "A静态代码块2");
    }

    public A() {
        Log.i("HIDETAG", "A构造方法");
    }

}

B类:

public class B extends A {

    private static C c1 = new C("B静态成员");

    {
        Log.i("HIDETAG", "B代码块");
    }

    private C c = new C("B成员");

    static {
        Log.i("HIDETAG", "B静态代码块2");
    }

    static {
        Log.i("HIDETAG", "B静态代码块");
    }

    public B() {
        Log.i("HIDETAG", "B构造方法");

    }

}

C类:

public class C {

    public C(String str) {
        Log.i("HIDETAG", str + "构造方法");
    }
}

执行语句:new B();

输出结果如下:

 I/HIDETAG: A静态代码块
 I/HIDETAG: A静态成员构造方法
 I/HIDETAG: A静态代码块2
 I/HIDETAG: B静态成员构造方法
 I/HIDETAG: B静态代码块2
 I/HIDETAG: B静态代码块
 I/HIDETAG: A成员构造方法
 I/HIDETAG: A代码块
 I/HIDETAG: A构造方法
 I/HIDETAG: B代码块
 I/HIDETAG: B成员构造方法
 I/HIDETAG: B构造方法

得出结论:

执行顺序依次为:
父类的静态成员和代码块
子类静态成员和代码块
父类成员初始化和代码快
父类构造方法
子类成员初始化和代码块
子类构造方法

注意:可以发现,同一级别的代码块和成员初始化是按照代码顺序从上到下依次执行

相关文章

网友评论

    本文标题: Java代码块与构造方法等执行的先后顺序

    本文链接:https://www.haomeiwen.com/subject/liurkttx.html