return语句可以在for循环的初始化部分吗?

问题描述 投票:-2回答:2

我听说某处的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++)
    ;
}
java for-loop
2个回答
0
投票

当然不能那样做!您一定听错了。 for循环的初始化可以包含变量声明或赋值语句,以逗号分隔,但不能包含return语句。

return语句根本没有意义[[any!您打算在for循环的initialization部分中编写initialization!显然,您无法使用return初始化内容。因此,这是不允许的。

正如@Tunaki所说,JLS非常清楚地陈述了这一点。而且我认为您在编码时不应该违反规则。例如,尽管它仍然可以工作,但您不想将Singleton的构造函数更改为public。在这种for循环的情况下,Java的创建者一定认为有些顽皮的人会在for循环初始化中编写一个返回值,因此他们限制了您可以在其中编写的内容。

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


3
投票
JLS的相关部分是section 14.14.1

BasicForStatement:

for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement

[[ForInit]定义为:

ForInit:

[ForInit]

StatementExpressionList

where

StatementExpressionList:

LocalVariableDeclaration

StatementExpression:

StatementExpression {, StatementExpression}AssignmentPreIncrementExpressionPreDecrementExpressionPostIncrementExpressionPostDecrementExpressionMethodInvocation

请注意,ClassInstanceCreationExpression不是允许的语句的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.