ローカル変数だからです。これが、何も割り当てられていない理由です:
ローカル変数は少し異なります。コンパイラは、初期化されていないローカル変数にデフォルト値を割り当てません。宣言されているローカル変数を初期化できない場合は、使用する前に必ず値を割り当ててください。初期化されていないローカル変数にアクセスすると、コンパイル エラーが発生します。
編集: Java でこのコンパイル エラーが発生するのはなぜですか?
クラスファイルを見ると、次のIdentifierExpression.java
ブロックが見つかります。
...
if (field.isLocal()) {
LocalMember local = (LocalMember)field;
if (local.scopeNumber < ctx.frameNumber && !local.isFinal()) {
env.error(where, "invalid.uplevel", id);
}
if (!vset.testVar(local.number)) {
env.error(where, "var.not.initialized", id);
vset.addVar(local.number);
}
local.readcount++;
}
...
( ) で述べたようif (!vset.testVar(local.number)) {
に、JDK は ( を使用してtestVar
) 変数が割り当てられているかどうかをチェックします (Vset
のソース コードでコードを見つけることができtestVar
ます)。そうでない場合は、プロパティ ファイルvar.not.initialized
からエラーが発生します。
...
javac.err.var.not.initialized=\
Variable {0} may not have been initialized.
...
ソース