blog

さあ、Javaの初期化順序を1つの記事で読もう!

Javaプログラムでは、オブジェクトがインスタンス化されると、そのオブジェクトのクラスのすべてのメンバ変数が初期化され、初期化が完了して初めてコンストラクタ・メソッドが呼び出されてオブジェクトが生成さ...

Feb 23, 2020 · 2 min. read
シェア

序文

Javaのプログラムでは、オブジェクトがインスタンス化されると、そのオブジェクトのクラスのすべてのメンバ変数が初期化され、初期化が完了して初めてコンストラクタ・メソッドが呼び出されてオブジェクトが生成されます。一緒に見てみましょう。

初期化ルール

  1. 変数はブロックより優先され、静的変数は非静的変数より優先されます。
  2. 親クラスは、派生クラスよりも優先して初期化されます。
  3. 変数定義がさまざまなメソッド定義の間に散らばっていても、コンストラクタ・メソッドが呼び出される前に初期化されます。

コード例

class Father {
 public Father() {
 System.out.println("親クラスのコンストラクタ・メソッド");
 }
 String str = "親クラスの非静的変数 ";
 {
 System.out.println(str);
 System.out.println("親クラスの非静的ブロック");
 }
 static String strStatic = "親クラスの静的変数 ";
 static {
 System.out.println(strStatic);
 System.out.println("親クラス静的ブロック");
 }
}
public class Son extends Father {
 public Son() {
 System.out.println("サブクラスのコンストラクタ ");
 }
 String str = "非静的変数をサブクラス化する ";
 {
 System.out.println(str);
 System.out.println("サブクラス非静的ブロック");
 }
 static String strStatic = "サブクラスの静的変数 ";
 static {
 System.out.println(strStatic);
 System.out.println("サブクラス静的ブロック");
 }
 public static void main(String[] args) {
 new Son();
 }
}
//結果
親クラスの静的変数
親クラスの静的ブロック
サブクラスの静的変数
サブクラスの静的ブロック
親クラスの非静的変数
親クラスの非静的ブロック
親クラスのコンストラクタ
非静的変数をサブクラス化する
サブクラスの非静的ブロック
サブクラスのコンストラクタ
Read next

Hikvision Webプラグイン対応iframeピットの実践

理由\nHikvision 3.1開発ガイドでは、明確に現在、唯一のdivタグの使用をサポートしていることを指摘し、方法に基づいてiframeの使用もブラウザのページのポップアップページの使用をサポートしていません。\niframeの適応のための顧客の要求のため\n問題1:入れ子のi

Feb 22, 2020 · 3 min read