我刚开始编码。我想对同一个变量使用两次switch语句,我被告知要这样做,变量必须是'inscope'。
作为一个初学者,我不知道那是什么意思。那么在范围内意味着什么呢?而且,如果一个变量不在作用域中,我如何使它在作用域中?
摘自《Java语言规范》第6.3节:
声明的范围是程序的区域,在该区域内,声明所声明的实体可以使用一个简单的名称来引用,前提是它是可见的。
这个范围的概念适用于Java中的许多种类的实体:从局部变量到顶层类和包的一切。即使只是谈论变量,也有很多情况,从局部变量到从另一个类静态导入的字段,再到try
语句的catch
子句中异常处理程序的参数。有关详细信息,请阅读JLS或在web上搜索“Java范围”,并阅读有关该主题的许多教程中的一个或多个。
局部变量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
,而不是this.foo
中的foo
或q.tolowercase
中的tolowercase
中的tolowercase
是合格的)是什么时,Java编译器将依次查找这些位置,直到找到匹配的位置:
该列表中还有其他一些(我不打算与初学者讨论静态导入)。
还有更多的范围,我建议通过一些教程和/或一本Java的入门书籍来了解更多。
1“局部变量”与“变量”--Java语言规范使用“变量”的方式比大多数人在常用语言中使用的方式更为普遍。当我在这个答案中说“变量”时,我指的是JLS所说的“局部变量”。
2“字段”-JLS在某些地方将字段称为“变量”(而在其他地方则称为“字段”),因此上面(1)。:-)
问题内容: 我试图了解在多个JavaConfig上下文中放置注释的正确位置在哪里? 考虑以下情形:我在JPAConfig.java和AppConfig.java中具有服务bean集的JPA配置。然后,在RootConfig.java中编写整个应用程序配置。 我在JPAConfig.java中定义事务管理器,并启用对JPA存储库的扫描- 当这些暴露事务行为时,我将其放到JPAConfig上,并且它可
问题内容: 如果输入: 默认范围是什么? 上市?受保护?私人的? 问题答案: 默认范围是package-private。同一包中的所有类都可以访问方法/字段/类。私有包比受保护的范围和公共作用域严格,但比私有作用域更宽松。 详细信息: http //docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html http://mindp
问题内容: 什么是词汇作用域简介? 问题答案: 我通过示例了解它们。:) 首先,采用类似C的语法的 词汇作用域 (也称为 静态作用域 ): 每个内部级别都可以访问其外部级别。Lisp的第一个实现使用另一种称为动态范围的方式,再次使用类似C的语法: 在这里既可以访问的或,或在调用任何函数与在其声明。 将打印5 将打印10。 第一个称为静态,因为它可以在编译时推导,第二个称为动态,因为外部范围是动态的
1、列不可再分; 2、每一行数据只做一件事,只与一列相关,主键; 3、每个属性都与主键有直接关系,而不是间接关系; 三大范式只是设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情结,当然要特殊对待,数据库设计最重要的是看需求和性能,需求>性能>表结构。 所以不能一味的追求三范式建立数据库。
问题内容: 我已经看到了声明,接口和类 这是什么意思? 问题答案: 没有证据,我相信您在谈论Java的泛型支持… 泛型允许您抽象类型 在Java 5之前,很难提供能够支持多种不同类型的Objects的类而不必为每种特定情况编写代码,因此人们通常会这样做。 这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否有可能将给定的Object强制转换为可用类型…例如 现在,这已经很明显了,但是如
主要内容:什么是Java语言,Java语言的特点Java 是近 10 年来计算机软件发展过程中的传奇,其在众多开发者心中的地位可谓“爱不释手”,与其他一些计算机语言随着时间的流逝影响也逐渐减弱不同,Java 随着时间的推移反而变得更加强大。 从首次发布开始,Java 就跃到了 Internet 编程的前沿。后续的每一个版本都进一步巩固了这一地位。如今,Java 依然是开发基于 Web 的应用程序的最佳选择。此外,Java 还是智能手机变革的推手