1

これがばかげた質問かどうかはわかりませんが、答えてみてください。

public static void main(String[] args){
    int i=0;
    final int x;
    if(i==0){
        x=1;
        System.exit(0); 
    }
    x=2;
}

最終変数 x があります。

値を xi に割り当てるには、値を割り当てる if ステートメントがあり、プログラムを終了します。

これで、最後のステートメントに到達することはないため、このプログラムは論理的にコンパイルされます。

x の値は、if ステートメントに応じて 1 または 2 になります。「if」が true の場合、最後のステートメントには到達せず、false の場合、「x=1」ステートメントには到達しません。

では、なぜ「ローカル」変数が初期化されたというコンパイル エラーが発生するのでしょうか。

編集:

はい、私は明らかに、最終ステートメントを 1 回だけ割り当てることができることを知っています。

私の疑問は、実行中にこれらのステートメントの1つだけに到達するので、そのように見ると、プログラムには割り当てステートメントが1つしかないということでした。

4

5 に答える 5

2
Final is Final 

一度宣言して譲渡すると、再度譲渡することはできません。

そして、最後の割り当てはコンパイル時のチェックです。関数を終了する前でも、その義務を果たします:)。

于 2013-06-24T07:26:45.493 に答える
1

x の値は、if ステートメントに応じて 1 または 2 になります。「if」が true の場合、最後のステートメントには到達せず、false の場合、「x=1」ステートメントには到達しません。

ifが続いていないので、これは真実ではありませんelse

また、System.exit(0)は単なる関数呼び出しであり、別のコード パスではないため、Java コンパイラはその後のコードが非常に到達可能であると想定します。より明確にするために、このスレッドを参照してください

final 変数に関する限り、2 回割り当てることはできません。

以下のコードは、 または のいずれかでi==0ある可能性があり、一度だけ割り当てられるため、エラーなしで機能します。truefalsex

    int i=0;
    final int x;
    if(i==0){
        x=1;
        System.exit(0); 
    }
    else {
        x=2;
    }
于 2013-06-24T07:29:40.683 に答える
1

一部の変数を final として宣言すると、それに値を割り当てることはできません

于 2013-06-24T07:27:41.213 に答える