【问题标题】:For loop brackets [duplicate]对于循环括号[重复]
【发布时间】:2015-04-20 20:02:04
【问题描述】:
public class MultithreadingFour {
        public static void main(String args[]){
                A obj = new A();
                Task task= new Task();
                for(int i=0; i<10; i++)
                        Thread t= obj.newThread(task);
        }
}

编译错误:这一行有多个标记

Syntax error, insert ";" to complete Statement
  t cannot be resolved to a variable
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
Syntax error, insert ":: IdentifierOrNew" to complete ReferenceExpression
  Thread cannot be resolved to a variable

public class MultithreadingFour {
        public static void main(String args[]){
                A obj = new A();
                Task task= new Task();
                for(int i=0; i<10; i++){
                        Thread t= obj.newThread(task);
                }
        }
}

编译成功(注意for 循环中添加的花括号)。

【问题讨论】:

  • 你到底在问什么?

标签: java for-loop


【解决方案1】:

在 Java 中,变量声明 Thread t = ... 在技术上不是语句,而块 { ... } 是。 for ( ... ) 后面的内容必须是声明。

【讨论】:

    【解决方案2】:

    “for 语句”的主体必须是“语句”。

    局部变量声明不是语句。所以你不能把局部变量声明作为“for语句”的“语句”。

    这是for 循环的允许语法:

    BasicFor 语句: for ( ForInitopt ; Expressionopt ; ForUpdateopt ) 语句

    ForStatementNoShortIf: for ( ForInitopt ; Expressionopt ; ForUpdateopt ) StatementNoShortIf

    您可能想阅读JLS 14. Blocks and Statements 了解更多信息。

    想一想,允许在单行 for 循环中声明变量是不合逻辑的,因为您永远无法访问它,因为它仅在循环范围内可用。

    【讨论】:

    • 感谢@Jean-Francois,它本可以将其显示为警告,但您是错误吗?例如: for(int i=0;i
    • @user3689942 Jonathan Gibbons(javac 的开发人员)在 RPF 上回答了这个问题,该 RPF 已经关闭为“不是问题”,其中有人有这个错误认为这是一个错误。 “是的,有点不一致,但规范是这样的,javac符合规范。”。如您所见,实际上并没有任何具体原因。规格就是这样,它们遵循规格。
    • @user3689942 如果你真的想增加 i,那么只需写 i++。这是不允许的变量声明。
    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2012-08-11
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多