Java 为什么必须在for循环初始化中声明变量? intv=0; for(v;v

Java 为什么必须在for循环初始化中声明变量? intv=0; for(v;v,java,Java,如果在循环之前声明了v,则应该将for语句的第一部分留空: int v = 0; for (; v < 2; v++) { ... } intv=0; 对于(;v

如果在循环之前声明了
v
,则应该将for语句的第一部分留空:

int v = 0;

for (; v < 2; v++) {
    ...
}
intv=0;
对于(;v<2;v++){
...
}
仅仅根据规则写
v;

是没有意义的

for语句的一般形式可以表示为:

for (initialization; termination; increment) {
    statement(s)
}

for循环的三个表达式是可选的

这意味着您可以为循环创建
,并将3个表达式中的一些保留为空。其中一个选项是在循环之前声明
int v

int v = 0;
for(; v<2; v++)
intv=0;

对于(;v如果在声明中删除无关的
v
(假设
v
是事先声明的),则循环声明有效:

将(;v<2;v++)更改为

传统的
for
循环中的所有三个修饰符在Java中都是可选的

备选方案示例: 以下与
while(true)
循环相同:

for (;;) {

}
增加额外增量:

int j = 0;
for (int k = 0; k < 10; k++, j++) {

}
intj=0;
对于(int k=0;k<10;k++,j++){
}
添加附加条件以终止循环:

int j = 0;
for (int k = 0; k < 10 || j < 10; k++, j++) {

}
intj=0;
对于(int k=0;k<10 | | j<10;k++,j++){
}
声明同一类型变量的多个:

for (int k = 0, j = 0; k < 10 || j < 10; k++, j++) {

}
for(int k=0,j=0;k<10 | | j<10;k++,j++){
}

显然,您可以根据需要混合和匹配其中的任何一个,完全忽略您想要的任何一个。

您不必在
ForInit
中声明变量

正如其他人所指出的,您可以简单地省略
ForInit
;但也可以在那里使用语句表达式列表

例如,您可以创建新的类实例、调用方法和分配/递增/递减变量:

int v;
for (new String(), "".toString(), v = 0, v++;;);
(这个例子毫无意义,但却是合法的)

但是,不能将这些语句表达式与局部变量声明混合使用。

intw=0

INTV


对于(v;vwe don;
for(;)
v
是不允许的,因为它不是一个语句:这与您不能在其他地方自己编写
v;
的原因相同。您需要一个增强的
for
循环。