一共3个类:A
、B
、C
其中A
是B
的父类,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构造方法
得出结论:
执行顺序依次为:
父类的静态成员和代码块
子类静态成员和代码块
父类成员初始化和代码快
父类构造方法
子类成员初始化和代码块
子类构造方法
注意:可以发现,同一级别的代码块和成员初始化是按照代码顺序从上到下依次执行
网友评论