なぜ最初のif
コンパイルは成功し、2 番目のコンパイルは失敗するのでしょうか?
if(proceed) {int i;} // This compiles fine.
if(proceed) int i;// This gives an error. (Syntax error on token ")", { expected after this token)
ベストアンサー1
言語仕様では次のように定められています。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html
宣言はプログラムにエンティティを導入し、このエンティティを参照するために名前で使用できる識別子 (§3.8) を含みます。宣言されたエンティティは次のいずれかです:
...
ローカル変数。次のいずれかです:
* ブロックで宣言されたローカル変数 (§14.4)
* for 文で宣言されたローカル変数 (§14.14)
最初の例はi
ブロック内で宣言しています (中括弧で示されています)。 2 番目の例はブロック内で宣言されておらず、ステートメントでもありませんfor
。
追加編集:それは常識的なことです。もし許可されたら、役に立たなくなります。すぐに範囲外になります。