Je viens d'avoir un coup d'oeil dans la grammaire de Java trouvée sur oracle.com : Chapter 18. Syntax. (je l'espère, est la version correcte qui applique à la question.)
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]
Ainsi, vous pouvez voir while
est suivi par ParExpression
(expression entre parenthèses) et Statement
.
Pour
while(true){
int u =89;
}
le Statement
après du corps de while
se développe pour Block
qui à son tour peut étendre à un LocalVariableDeclarationStatement
.
Pour
while(true)
int u =89; // compile time error
le Statement
du corps de while
ne peut pas ÉTENDU pour LocalVariableDeclarationStatement
comme où est pas Block
.
Ainsi, le 2 et ne fait tout simplement pas partie du langage Java (basé sur sa grammaire).
Je ne sais pas pourquoi une erreur de compilation se produirait, mais pourquoi déclarez-vous quelque chose dans une portée d'une instruction? La déclaration de 'int u' utilise votre seule déclaration. Vous ne seriez pas capable de l'utiliser, à l'intérieur ou à l'extérieur de la portée. – slothh
oui, pas d'utilisation de déclarer une seule déclaration, mais c'est une question d'entrevue difficile. J'essaie de trouver le pourquoi de chaque code. il peut y avoir une raison pour l'erreur de compilation. merci pour le commentaire –
Bienvenue! Désolé, je ne pourrais pas être plus utile. Bonne chance quand même. – slothh