为什么我们不能在没有花括号的while循环之后使用声明性语句?

时间:2017-09-24 10:51:27

标签: java loops while-loop iteration declaration

不使用花括号为什么我们不能在UserID循环之后使用声明性语句?

使用Curley括号,它可以实现:

while

如果没有花括号,则会发生编译时错误:

while(true){
    int u =89;
}

2 个答案:

答案 0 :(得分:2)

语法上的原因是@Enumerated(EnumType.STRING)语句之后的元素是while,它包含所有可执行语句,特别是块,但不包括声明。

设计理由是它不会有任何意义。声明的变量的范围将在结束分号处终止,因此声明的变量在后续的程序文本中无法使用。

答案 1 :(得分:1)

我刚看了oracle.com上发现的Java语法: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(true){
    int u =89;
}

Statement身体之后的while扩展为BlockLocalVariableDeclarationStatement可能会扩展为while(true) int u =89; // compile time error

有关

Statement

while LocalVariableDeclarationStatement的身体无法扩展为Block,因为其中没有<a href="abc> google </a>

因此,2 nd 根本不是Java语言的一部分(基于它的语法)。