2

static final double PI;のように定数を宣言すると、The blank final field PI may not have been initializedエラーが発生します。最初にこの方法で宣言し、後で初期化できないのはなぜですか?

更新:初期定数値がわからない可能性があり、値を取得できるように、ロジックの後で初期化する必要があります。そのため、後で初期化する必要があります。

4

9 に答える 9

2

変数は静的手段として宣言されます。クラスがメモリにロードされると、すべての静的変数もメモリにロードされます。その上、その変数がfinalであるということは、クラスのロード時に何らかの値でなければならないことを意味します。非静的なコードブロックで初期化するということは、その値をnothing(null)から新しく割り当てられた値に変更することを意味します。

これは、静的final変数を初期化していない場合でも、クラスの静的ブロックで初期化できるという例でわかります。

class Demo {
       static final String msgHeader;
       /*
           Some lines of code
       */
       static { 
                msgHeader="Please Verify the Input";
       }
 }
于 2012-12-04T09:35:58.670 に答える
2

コードの後半で初期化できます。使用する前に初期化する必要があります。

一度メモリを書き込むことはなく、値が設定されるまで読み取りはブロックされません。

于 2012-12-04T09:23:54.167 に答える
1

Javaは、最終フィールドが一度だけ初期化され、変更されないようにする必要があります。これは、初期化中にのみ発生する可能性があります。

于 2012-12-04T09:23:49.640 に答える
1

一度割り当てられた定数は変更できないためです。:)

于 2012-12-04T09:24:01.060 に答える
1

この問題を解決するには、最初の値を初期化する必要があると思います

static final double PI = 3.14;

あなたの問題を解決することができます

于 2012-12-04T09:24:23.623 に答える
0

それは一定ではないので、プログラムのさまざまな場所で値を変更できます。

于 2012-12-04T09:23:39.703 に答える
0

設定する前に変数を読み取ろうとしているためです。

JAVAでは、読み取る前のどこにでも設定することができます。しかし、あなたの場合、あなたはそれをとしてマークしました、finalそしてstaticそれは意味します

final :値は1回だけ設定できます
statis:この変数を静的に設定しました。これは、クラスごとに1つ作成されることを意味します。

于 2012-12-04T09:26:28.520 に答える
0

フィールドPIは「最終」としてマークされているため、後でフィールドに新しい値を割り当てて変更することはできません。Finalは、フィールドPIを定数としてマークします。したがって、宣言自体の間に、まったく変更できない値を指定する必要があります。

于 2012-12-04T09:27:29.193 に答える
0

Javaの他のすべての通常の変数と同様に、定数変数も、メソッド内で最初に使用される前に宣言する必要があります。初期化せずにその変数を使用する必要がある場合は、メソッドに変数を宣言するのではなく、クラス変数としてその変数を宣言する必要があります。これは定数変数であり、この変数をクラス変数として宣言した場合、その値を変更することはできません。 。

于 2012-12-04T09:30:33.203 に答える