Untitled

Untitled

Untitled

顺序问题中,类加载时,父类先被加载,再到子类。

普通代码块是构造器的补充,只有创建对象时,才会执行,且,创建一次就调用一次。

static静态代码块,类加载时执行,且只执行一次。

Untitled

在一个类:调用顺序(即,不涉及继承)

step1 先调用静态代码块和静态属性初始化(根据代码的顺序决定他们的顺序)

step2 调用普通代码块和普通属性初始化,根据定义顺序

step3 调用构造方法

Untitled

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("我是子类构造器");
    }
}
输出:
我是父类静态代码块和静态属性初始化
我是子类静态代码块和静态属性初始化
我是父类普通代码块和普通属性初始化
我是父类构造器
我是子类普通代码块和普通属性初始化
我是子类构造器

Untitled