A.まず、コードを貼り付けます
public class InitOrderDemo extends Father {
private PObject p = new PObject("子类 - 实例变量");
static {
sp = new PObject("子类静态代码块 - 静态变量");
}
static PObject sp = new PObject("子类 - 静态变量");
InitOrderDemo(){
System.out.println("子类构造函数开始执行 ...");
}
public static void main(String[] args) {
new InitOrderDemo();
}
}
class Father{
private PObject p = new PObject("父类 - 实例变量");
private static PObject sp = new PObject("父类 - 静态变量");
Father(){
System.out.println("父类构造函数开始执行 ...");
}
{
p = new PObject("父类实例代码块 - 实例变量");
}
static {
sp = new PObject("父类静态代码块 - 静态变量");
}
}
class PObject{
PObject(String type){
System.out.println("作为 "+type+" 成员的 PObject 构造函数执行 ...");
}
}
II。結果は、ルーチンを実行します
作为 父类 - 静态变量 成员的 PObject 构造函数执行 ...
作为 父类静态代码块 - 静态变量 成员的 PObject 构造函数执行 ...
作为 子类静态代码块 - 静态变量 成员的 PObject 构造函数执行 ...
作为 子类 - 静态变量 成员的 PObject 构造函数执行 ...
作为 父类 - 实例变量 成员的 PObject 构造函数执行 ...
作为 父类实例代码块 - 实例变量 成员的 PObject 构造函数执行 ...
父类构造函数开始执行 ...
作为 子类 - 实例变量 成员的 PObject 构造函数执行 ...
子类构造函数开始执行 ...
III。概要
文:先静态,后实例。先父类,后子类。
この順:
- 何の継承がない場合は、実施例のセクションを初期化した後、静的な部分を初期化します
- 継承がある場合:
- 先祖クラスの静的部分、サブクラスの静的部分
- 父クラスのインスタンス部分、親クラスのコンストラクタ
- 最初の部分のサブクラスのインスタンス、サブクラスのコンストラクタ
- 補足部分:
- 静的部分は順次クラスに応じて行われ、コードの静的ブロックは、予め静的メンバ変数を参照することができ、以下に定義されます
- (インスタンス変数とインスタンス・コード・ブロックを含む)部分の例には常にクラスでないために、コンストラクタの前に連続して行われます