1

プログラムコード:

public class A{
   public static final String l;

   public void method(String strTestData){
     l = strTestData;
   }
}

strTestData には、「public static final java.lang.String DELETE」のようなデータが含まれます。出来ますか?

4

4 に答える 4

2

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..";
于 2013-06-19T13:38:11.620 に答える
1

変数が final として宣言されている場合、初期化できるのは一度だけです。実際、正確に一度初期化する必要があります。これは、メンバー変数を宣言するとき、またはコンストラクターで発生する必要があります。

それを変えようとすることも不可能です。

于 2013-06-19T13:35:07.603 に答える
1

finalメソッドから変数を初期化することはできません。これが必要なのは、コンパイラが変数を 1 回だけ初期化する必要があるためです。

メソッドはいつでも呼び出すことができるため、コンパイラは変数が一度だけ初期化されることを保証できません。

于 2013-06-19T13:35:58.073 に答える