Java return语句是否可以位于for循环的初始化部分?

Java return语句是否可以位于for循环的初始化部分?,java,for-loop,Java,For Loop,我听说在for循环的初始化部分可以有任何有效的java语句 当我试图编译这段代码时,它给了我一个错误:表达式的开始是非法的。 虽然我期望出现无法访问的代码错误 可能的原因是什么 谢谢 class A { public static void main(String args[]){ int x=1; System.out.println("sds"); } public int m1() { int x=1; for(return 0

我听说在for循环的初始化部分可以有任何有效的java语句

当我试图编译这段代码时,它给了我一个错误:表达式的开始是非法的。 虽然我期望出现无法访问的代码错误

可能的原因是什么

谢谢

class A
{

    public static void main(String args[]){

    int x=1;
    System.out.println("sds");


 }
public  int m1()
{



    int x=1;


    for(return 0;x==1;x++)
    ;
}

JLS的相关部分包括:

基本陈述:

for([ForInit];[Expression];[ForUpdate])语句

定义为:

ForInit:

StatementExpressionList

LocalVariableDeclaration

在哪里

语句表达式列表:

StatementExpression{,StatementExpression}

语句表达式:

作业

PreIncrementExpression

predecrementpression

增量后压缩

递减后压缩

MethodInvocation

ClassInstanceCreationExpression


请注意,
[ReturnStatement]
不是允许的语句的一部分。

当然不能这样做!你一定是听错了。for循环的初始化可以包含变量声明或赋值语句(用逗号分隔),但不能包含返回语句

返回语句毫无意义!您打算在for循环的初始化部分写入初始化!显然,您不能用
返回值初始化内容。因此,这是不允许的

正如@Tunaki所说,JLS非常清楚地说明了这一点。我认为你在编码时不应该违反规则。例如,您不希望将Singleton的构造函数更改为public,尽管它仍然有效。在这个for循环的例子中,Java的创始人一定认为一些淘气的人会在for循环初始化中写一个返回,所以他们限制了你可以在那里写什么


记住,不要做没有意义的事。

你听错了。初始化部分要么是用逗号分隔的表达式,要么是变量声明(可能是同一类型的多个变量)。我想不出这样做的可能原因。“for循环的初始化可以包含变量声明或赋值语句…”和其他几种类型的语句,如图所示。也许与直觉相反,这包括对
void
methods.hmmm的调用,
void
方法也可以进行一些初始化{排除
System.exit(0)
[:-)}(有点奇怪,但可能)