JAvaクラスにおける変数の初期化

1494 ワード

一般的な初期化
public class BedAndBreakfast {

    // initialize to 10
    public static int capacity = 10;

    // initialize to false
    private boolean full = false;
}

変数値が有効で1行に書ける場合、変数が初期化されると同時に値を付与できます.変数の初期化には、for文やif文を使用して初期値を得るなど、一定の論理が必要な場合は、この方法は適切ではありません.
クラスには2つの変数があり、クラス変数とインスタンス変数があります.コンストラクション関数で初期化できますが、他の方法でそれぞれ初期化することもできます.以下で説明します.
静的初期ブロック
static {
    // whatever code is needed for initialization goes here
}

静的初期高速は、括弧{}に囲まれ、staticによって宣言される.ここでは、一定の論理を実行し、クラス変数を初期化できます.静的初期ブロックが複数ある場合、定義された順序で実行されます.クラスがクラスローダにロードされると、静的変数が初期化されます.
もう1つの静的変数の初期化は、初期化のための静的方法を提供することである.
class Whatever {
    public static varType myVar = initializeClassVariable();
        
    private static varType initializeClassVariable() {

        // initialization code goes here
    }
}

インスタンス変数の初期化
静的変数と似ていますが、static宣言が少ないだけです.このコードブロックのコードは実際にコンパイラによって各コンストラクタにコピーされるため,異なるコンストラクタにおけるコードブロックの共有が実現される.
{
    // whatever code is needed for initialization goes here
}

もちろん、finalメソッドによりインスタンス変数を初期化することもできます.
class Whatever {
    private varType myVar = initializeInstanceVariable();
        
    protected final varType initializeInstanceVariable() {

        // initialization code goes here
    }
}

非finalメソッドの初期化は、変数の初期化時にエラーが発生します.
参照先:
https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html