中括弧を使用しないとなぜwhile
ループの後に宣言文を使用できないのですか?カーリーとwhileループの後に中括弧なしで宣言文を使用できないのはなぜですか?
はそれがcompailsブレース:
while(true){
int u =89;
}
を中括弧がなければ、コンパイル時エラーが発生します。
while(true)
int u =89; // compile time error
中括弧を使用しないとなぜwhile
ループの後に宣言文を使用できないのですか?カーリーとwhileループの後に中括弧なしで宣言文を使用できないのはなぜですか?
はそれがcompailsブレース:
while(true){
int u =89;
}
を中括弧がなければ、コンパイル時エラーが発生します。
while(true)
int u =89; // compile time error
構文上の理由は、while
ステートメントの後の要素が、すべての実行可能ステートメント、特にブロックを含み、宣言を含まないstatement
であるということです。
設計上の理由は、それが意味をなさないことではないということです。宣言された変数のスコープは、セミコロンの終わりで終了するため、宣言された変数は後続のプログラムのテキストでは使用できません。
を私はただのJavaの文法に表情がoracle.comで見つけました:Chapter 18. Syntax。 (私はそれが問題に適用される正しいバージョンであると思います。)
Statement: Block ; Identifier : Statement StatementExpression ; if ParExpression Statement [else Statement] assert Expression [: Expression] ; switch ParExpression { SwitchBlockStatementGroups } while ParExpression Statement do Statement while ParExpression ; for (ForControl) Statement break [Identifier] ; continue [Identifier] ; return [Expression] ; throw Expression ; synchronized ParExpression Block try Block (Catches | [Catches] Finally) try ResourceSpecification Block [Catches] [Finally]
したがって、あなたはwhile
がParExpression
(括弧内の式)とStatement
が続いている見ることができます。 while
の体の後
while(true){
int u =89;
}
Statement
については
は順番にLocalVariableDeclarationStatement
に拡大することBlock
に展開されます。何Block
どこにではないとして
は
while(true)
int u =89; // compile time error
についてStatement
while
S体LocalVariableDeclarationStatement
に拡張することができません。
したがって、2 ndは、(文法に基づいて)Java言語の一部ではありません。
コンパイル時エラーが発生する理由はわかりませんが、なぜ1つのステートメントスコープで何かを宣言していますか? 'int u'の宣言はあなたの単一のステートメントを使い果たします。スコープの内部または外部で使用することはできません。 – slothh
ええ、1つのステートメントを宣言するのは使用しませんが、それは難しい面接の質問です。私はすべての単一コードのWHY部分を見つけることを試みています。コンパイル時にエラーが発生する可能性があります。コメントありがとう –
ようこそ!申し訳ありませんが、私はもっと助けになることはできませんでした。しかし、幸運。 – slothh