


顺序问题中,类加载时,父类先被加载,再到子类。
普通代码块是构造器的补充,只有创建对象时,才会执行,且,创建一次就调用一次。
static静态代码块,类加载时执行,且只执行一次。

在一个类:调用顺序(即,不涉及继承)
step1 先调用静态代码块和静态属性初始化(根据代码的顺序决定他们的顺序)
step2 调用普通代码块和普通属性初始化,根据定义顺序
step3 调用构造方法

package p390;
public class codeblock {
static int static_num = 10;
{
System.out.println("我是父类普通代码块");
}
static {
System.out.println("我是父类静态代码块");
}
codeblock(){
System.out.println("我是父类构造器");
//隐藏了:
//super()
//该类普通属性初始化以及普通代码块
}
public static void main(String[] args) {
new son_codeblock();
}
}
class son_codeblock extends codeblock{
{
System.out.println("我是子类普通代码块");
}
static {
System.out.println("我是子类静态代码块");
}
son_codeblock(){
//隐藏了:
//super()
//该类普通属性初始化以及普通代码块
System.out.println("我是子类构造器");
}
}
输出:
我是父类静态代码块和静态属性初始化
我是子类静态代码块和静态属性初始化
我是父类普通代码块和普通属性初始化
我是父类构造器
我是子类普通代码块和普通属性初始化
我是子类构造器
