public class HelloA {
static {
System.out.println("A static");
}
{
System.out.println("A code block");
}
public HelloA(){
System.out.println("A construst");
}
}
public class HelloB extends HelloA {
static {
System.out.println("B static");
}
{
System.out.println("B code block");
}
public HelloB(){
System.out.println("B construst");
}
public static void main(String[] args) {
new HelloB();
new HelloB();
}
}
执行 HelloB
中 main
方法,输出什么?
A static
B static
A code block
A construst
B code block
B construst
A code block
A construst
B code block
B construst
从运行结果可以看出
1.静态代码块只执行一次,而且是最先执行;
2.会优先执行父类静态代码块;
3.每次创建对象,会优先执行非静态代码块,然后执行构造方法;
4.如果有父类,会优先执行父类的代码块及构造函数;