我刚刚开始编码。我想对同一个变量使用两次switch语句,我被告知要做到这一点,变量必须是'在范围内'。 作为初学者,我不知道这意味着什么。 那么范围是什么意思呢?并且,如果变量不在范围内,如何使其在范围内? 谢谢。
答案 0 :(得分:1)
局部变量 1 在"范围内"如果代码可以访问它并且超出范围,如果它不能。在Java中,变量的作用域是它们声明的块({}
)。所以:
void foo() {
int a = 42;
if (/*some condition*/) {
String q = "Life, the Universe, and Everything";
// 1. Both `a` and `q` are in scope here
System.out.println(a);
System.out.println(q);
if (/*another condition*/) {
// 2. Both `a` and `q` are in scope here, too
System.out.println(a);
System.out.println(q);
}
}
// 3. Only `a` is in scope here
System.out.println(a);
System.out.println(q); // ERROR, `q` is not in scope
}
注意上述(1),(2)和(3):
代码可以访问q
,因为q
在与代码相同的块中声明; tt可以访问a
,因为它已在包含块中声明。
代码可以访问q
,因为它在包含块中声明了;它可以访问a
,因为它出现在下一个区块中。
代码可以访问a
,但不能访问q
,因为q
未在块或任何块(或其他几个块)中声明包含它的东西。
在确定哪个不合格的标识符(例如上面的a
或q
,而不是foo
中的this.foo
或toLowerCase
中q.toLowerCase
时1}},它们是限定),Java编译器将逐个查看这些位置,直到找到匹配项:
该列表还有其他几个(我不打算用初学者进入静态导入)。
范围还有很多,我建议您完成一些教程和/或一本Java教程。
1 "局部变量" vs."变量" - Java Language Specification使用"变量"比大多数人在普通演讲中做的更普遍。当我说"变量"在这个答案中,我的意思是JLS称之为" 本地变量"。
2 " field" - JLS调用字段"变量"在某些地方(和#34;领域"在其他地方),因此(1)在上面。 : - )
答案 1 :(得分:0)
来自Section 6.3 of the Java Language Specification:
声明的范围是程序的一个区域,只要它是可见的,就可以使用简单的名称引用声明声明的实体。
scope 的概念适用于Java中的多种实体:从局部变量到顶级类和包的所有内容。即使只讨论变量,也有很多情况,从局部变量到另一个类的静态导入字段到catch
语句的try
子句中的异常处理程序的参数。有关详细信息,请阅读JLS或在Web上搜索" Java范围"并阅读有关该主题的许多教程中的一个或多个。