//HelloB.java
public class HelloB extends HelloA
{
public HelloD d = new HelloD();
public static HelloC c = new HelloC();
public HelloB()
{
System.out.println("B constructor");
}
{
System.out.println("I’m B class");
}
static
{
System.out.println("static B");
}
public static void main(String[] args)
{
new HelloB();
}
}
class HelloA
{
public HelloA()
{ System.out.println("A constructor");
}
{
System.out.println("I’m A class");
}
static
{
System.out.println("static A");
}
}
class HelloC{
public HelloC(){
System.out.println("C constructor");
}
}
class HelloD{
public HelloD(){
System.out.println("D constructor");
}
}
实验结果:
static A
C constructor
static B
I’m A class
A constructor
D constructor
I’m B class
B constructor
结果说明:
1 父类静态代码块
2 本身静态成员变量初始化
3 本身静态代码块
4 父类非静态代码块
5 父类构造方法
6 本身的非静态成员变量初始化
7 本身非静态代码块
8 本身构造函数
总结:
父类 加载 》》 子类
静态 》》 非静态
静态成员变量调用的方法或构造函数的初始化 》》 非静态成员变量初始化 》》 非静态代码块 》》 构造函数