2

他の変数と同様に、最終的なフィールドタイプ変数を空白に割り当てたいのですが、初期化がJavaによってブロックされています。その論理は何ですか?たぶん、変数のデフォルト値を使用したいですか?int = 0、string = null boolean=falseなどの場合..

public class Hello {

static final int myNumber; /* it is giving "The blank final field myNumber 
                                may not have been initialized" error in Eclipse */
}
4

5 に答える 5

4

Javaではfinal、変数でキーワードを使用した後static、宣言の時点で値を定義する必要があります。あなたはそれにいくらかの価値を与え、それに固執しなければなりません。

于 2012-11-24T05:46:48.613 に答える
3

最終変数は、初期化子または代入ステートメントのいずれかを介して、一度だけ初期化できます。宣言の時点で初期化する必要はありません。これは「空白のfinal」変数と呼ばれます。

コードを変更する

public class Hello {

final int myNumber; 
 public Hello(int num){
 this.myNumber = num;
}

}

静的最終変数の場合、初期化に静的ブロックを使用します

static{
        myNumber = 0;
    }
于 2012-11-24T05:47:33.170 に答える
1

Java仕様から:「空白のfinal(§4.12.4)クラス変数が、それが宣言されているクラスの静的初期化子(§8.7)によって明確に割り当てられていない(§16.8)場合、コンパイル時エラーになります。 「」

于 2012-11-24T05:58:42.030 に答える
0

変数で「final」修飾子を使用する場合は、それを初期化する必要があります。これは、代入演算子(空白のままにすると、一度初期化できます)を使用できる唯一の時間だからです( "=") 。parker.sikandが言ったように、後で値を割り当てようとするとエラーが発生します。

また、final STRICTLYは、代入演算子を使用できないことを意味するという重要な注意事項があります。「final」であるオブジェクトが可変オブジェクトである場合、もちろん、そのオブジェクトの内容は、代入演算子を使用せずに変更できます。

編集:最終変数は、プログラムのある時点で初期化されることが保証されている必要があると思います。そのため、通常、宣言時に初期化されます。

于 2012-11-24T05:49:47.347 に答える
0

Eclipse 2019-09は、そのためのクイックフィックスを提案しています。

final' 'フィールドを初期化します

finalクラスコンストラクタの初期化されていないフィールドを初期化するためのJavaクイックフィックスが提供されるようになりました。

https://www.eclipse.org/eclipse/news/4.13/images/finalquickfix1.png

この修正Stringにより、aが空の文字列に初期化され、数値の基本型が0に初期化され、クラスフィールドの場合、デフォルトのコンストラクターが使用可能な場合はデフォルトのコンストラクターを使用して初期化され、デフォルトのコンストラクターが存在しない場合はnullが初期化されます。

https://www.eclipse.org/eclipse/news/4.13/images/finalquickfix2.png

于 2019-09-21T22:19:52.143 に答える