让我解释一下。
我在main方法中有一个int i = 9
。现在我在同一个main方法中有循环。看下面的例子
class Test {
public static void main(String... args) throws Exception{
int i =39;
for (int i = 0; i < 10; i++) { // error:i already defined
}
}
}
对于上面的例子,它显示了我已经定义的编译时错误。从这个错误我认为我在for条件中声明的范围也是在循环之外。
现在参见以下示例
class Test {
public static void main(String... args) throws Exception{
for (int i = 0; i < 10; i++) {
}
System.out.println(i); // error: cannot find symbol i
}
}
在上面的示例中,它显示了无法找到符号i的循环外的错误。
如果没有找到我在for循环条件中声明。那么为什么它显示i已在第一个例子中定义
答案 0 :(得分:3)
根据Block
的定义块是平衡大括号之间的一组零个或多个语句,可以在允许单个语句的任何位置使用。
所以
{ //block started
} //block ended
块中声明的变量是什么,范围仅限于该块。
拇指规则的变量范围是{}
。
public static void main(String... args) throws Exception{
int i =39;
for (int i = 0; i < 10; i++) {
System.out.println(i); // which i ??
}
}
在上面的例子中,编译器混淆了它正在寻找的 i ,因为i
已经定义了,并且它也有一个在循环中访问的范围。
i
方法范围
main
public static void main(String... args) throws Exception{
for (int i = 0; i < 10; i++) {
}
System.out.println(i); // the scope ended already with in {}
}
在上述情况下,i
范围已在for {}
中结束,但在外部不可用。
答案 1 :(得分:1)
在第一个场景中,i
具有方法范围。它在声明后的main()
方法中随处可见。因此,当您尝试在i
中声明另一个for
时,它会给出已定义的错误。
public static void main(String... args) throws Exception{
int i =39; // i will be visible throughout the main method
for (int i = 0; i < 10; i++) { // i already declared above, thus the error
}
}
在第二种情况中,i
在for
内声明,因此在其外部不可见。在i
循环中声明的变量for
只能使用{ for loop block }
访问,并且在结束花括号后超出范围。这就是为什么它会在i
循环之后在SOP语句中找不到符号for
的错误。
public static void main(String... args) throws Exception{
for (int i = 0; i < 10; i++) { // i is declared within the for
// anywhere within this block, i is visible/in-scope
} // after this closing braces of for, i has gone out of scope
System.out.println(i); // thus the error: cannot find symbol i
}
答案 2 :(得分:1)
第一个例子:
i
范围是完整的main
方法
第二个例子:
i
范围是for
循环
干杯
答案 3 :(得分:1)
你可以想到
for (int i = 0; i < 10; i++) {
}
等同于
{
int i;
for (i = 0; i < 10; i++) {
}
}
换句话说,声明的范围是for(...)
本身的各种表达式,加上循环体,但没有超出循环体的末尾。
在您的第一个示例中,您可以从int
中删除for
,使其成为作业而不是声明:
public static void main(String... args) throws Exception{
int i =39;
for (i = 0; i < 10; i++) { // re-assigns the existing i variable
}
System.out.println(i); // prints 10
}
答案 4 :(得分:1)
下面的代码给出错误
int i =39;
for (int i = 0; i < 10; i++) { // error:i already defined
}
下面不会给出错误
for (int i = 0; i < 10; i++) {
}
int i =39;
答案 5 :(得分:1)
在这个例子中
class Test {
public static void main(String... args) throws Exception{
int i =39;
for (int i = 0; i < 10; i++) { // error:i already defined
}
}
}
您将i
声明为int
2次,这在java中是不允许的,因为它们在同一范围内。
现在在这个例子中
class Test {
public static void main(String... args) throws Exception{
for (int i = 0; i < 10; i++) {
}
System.out.println(i); // error: cannot find symbol i
}
}
i
的范围在for循环中,并且您尝试在for循环外打印i
这是工作代码
class Test {
public static void main(String... args) throws Exception{
int i;
for ( i = 0; i < 10; i++) {
}
System.out.println(i); // error: cannot find symbol i
}
}
输出 10
答案 6 :(得分:0)
您要做的就是在for循环之前添加另一个变量。然后,使用所需的i进行检查。
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 10; i++) {
j = i;
}
System.out.println(j);
}