オブジェクト向けプログラミング(Java)-クラス内の変数を初期化します.


初期化変数


変数を宣言し、最初に値を保存することを변수의 초기화と呼びます.変数の初期化は必須またはオプションの場合がありますが、可能な場合は宣言と同時に適切な値に初期化する必要があります.
クラスでは、インスタンス変数を単独で初期化する必要はありません.資料型に応じて適切な値で初期化されるからです.ただし、領域変数は使用する前に初期化する必要があります.
class App {
	int x;
    int y = x;
    
    void method(){
    	int i;
        int j = i;	// 런타임 에러! 지역 변수 초기화 없이 사용
    }
}
参照として、各タイプのデフォルト値は次のとおりです.
データ型基本値booleanfalsechar"<00"byte,short,ing 0 long 0 Lfloat 0.0fdouble0.0 dまたは0.0参照変数null

メンバー変数の初期化


メンバー変数の初期化には、ゾーン変数とは異なり、さまざまな方法があります.これを比較して説明します.

1.明示的な初期化


変数は宣言と同時に初期化されます.
class App{
	int a = 1, b = 2;
}
[ブロックを初期化](Initialization Block)またはジェネレータを使用して、最も簡単で、最も一般的で、最も複雑な初期化操作を行います.

2.初期化ブロック


クラス初期化ブロックとインスタンス初期化ブロックの2種類があります.前者はクラス変数の初期化に使用され、後者はインスタンス変数の初期化に使用されます.
class App{
	static int A = 1;
    static{
    	A = 2;
        // a = 1;	// Error : 인스턴스 변수 초기화 불가
    }
    int a = 0;
    {
    	
    }
}
参照として、複数の初期化ブロックを作成できます.さらに最も重要なのは,クラスを最初に割り当てて初期化する際に,複数の論理を実行して初期化を実行できることである.final型変数も!

class App {
	// 이렇게 final형도 초기화가 가능하고, 블럭도 여럿 나눌 수 있어요!
   final static StringBuilder sb;
   static{
       sb = new StringBuilder();
       sb.append("a");
   }
   int i = 0;
   int a = 2;
   {
       i = 1;
       a = 2;
   }
   final static StringBuilder sb2;
   static{
       sb2 = new StringBuilder();
       sb.append("a");
   }
}

メンバー変数の初期化時間と順序


≪クラス変数|Class Variables|oem_src≫:クラスの最初のロード時に1回のみ初期化
≪インスタンス変数|Instance Variable|oem_src≫:インスタンスが作成されるたびに、各インスタンスが初期化されます.
クラス変数初期化順序:デフォルト→to→明示的初期化→to→クラス初期化ブロック
インスタンス変数初期化順序:デフォルト→\to→明示的初期化→\to→インスタンス初期化ブロック→\to→ジェネレータ
例を見ると、以下のようになります.
// 초기화 순서 
// 1. 기본 값 : cv = 0
// 2. 명시적 초기화 : cv = 1
// 3. 클래스 초기화 블럭 : cv = 2
// 4. 기본값 : iv = 0, cv = 2
// 5. 명시적 초기화 : iv = 1, cv = 2
// 6. 인스턴스 초기화 블럭 : iv = 2, cv = 2
// 7. 생성자 : iv = 3, cv = 3
class App{
	static int cv = 1;
    int iv = 1;
    static{
    	cv = 2;
    }
    {
    	iv = 2;
	}
    App(){
		iv = 3;
    }
}