プログラムコード:
public class A{
public static final String l;
public void method(String strTestData){
l = strTestData;
}
}
strTestData には、「public static final java.lang.String DELETE」のようなデータが含まれます。出来ますか?
final 変数を関数に初期化したい
いいえ、できません。これはJLS8.3.12に従っています。
空白の final (§4.12.4) クラス変数が、それが宣言されているクラスの静的初期化子 (§8.7) によって確実に割り当てられていない (§16.8) 場合、コンパイル時エラーになります。
空白の final インスタンス変数は、それが宣言されているクラスのすべてのコンストラクター (§8.8) の最後に確実に割り当てる必要があります (§16.9)。そうしないと、コンパイル時エラーが発生します。
したがって、コードは次のようになります。
public class A{
public static final String l;
static
{
l = "Static String initialized..";
}
}
または、次のように宣言時に最終変数を初期化できます。
public static final String l = "Static String initialized..";
変数が final として宣言されている場合、初期化できるのは一度だけです。実際、正確に一度初期化する必要があります。これは、メンバー変数を宣言するとき、またはコンストラクターで発生する必要があります。
それを変えようとすることも不可能です。
final
メソッドから変数を初期化することはできません。これが必要なのは、コンパイラが変数を 1 回だけ初期化する必要があるためです。
メソッドはいつでも呼び出すことができるため、コンパイラは変数が一度だけ初期化されることを保証できません。