例:
public class Sample {
// クラス定数 (static final変数)
static final int A = 365;
static final int B;
// クラス変数 (static変数)
static int c;
// インスタンス定数 (final変数)
final int D = 24;
final int E;
// インスタンス変数
int f;
static {
// コンパイルエラー: 初期化済定数の再初期化はできない
// A = 0;
// staticイニシャライザ内であればクラス定数の初期化が可能
B = 366;
c = 4;
}
Sample() {
// コンパイルエラー: 初期化済定数の再初期化はできない
// D = 0;
// コンストラクタ内であればインスタンス定数の初期化が可能
E = 60;
// インスタンス変数への代入は当然可能
f = 7;
// クラス変数への代入も可能
c = 100;
}
public static void main(String args[]) {
Sample sample = new Sample();
}
}
- クラス定数(static final変数)の初期化は宣言時、あるいはstaticイニシャライザ内で可能(クラスロード時に呼び出されるため)
- インスタンス定数(final変数)の初期化は宣言時、あるいはコン*ストラクタ内で可能
- 宣言時に定数を初期化し、加えて再度初期化を行うとコンパイルエラー(初期化の重複)