Java中的”作用域”是什么? 您所在的位置:网站首页 java中变量的作用域是指什么 Java中的”作用域”是什么?

Java中的”作用域”是什么?

2024-05-10 23:06| 来源: 网络整理| 查看: 265

我刚刚开始编码。我想对同一变量使用一次switch语句两次,并被告知要执行此操作,变量必须在"范围内"。

作为一个初学者,我不知道这意味着什么。那么,范围是什么意思呢?而且,如果变量不在范围内,那么如何在范围内进行设置?

相关讨论 请看这里 @npinti,你击败了我,哈哈。无论如何,就目前而言,对于OP来说,您的问题将被关闭,因为它确实太广泛了。请在此处参阅如何问什么事情可以问的问题。 简而言之:变量的范围定义了代码中可见该变量的部分。通常,在一个块内定义的变量不能在该块外访问。您可以通过查看上面发布的链接来了解其含义,这并不难。 Java范围和变量生存期的可能重复项 您甚至尝试搜索java variable scope吗?

如果代码可以访问局部变量1,则它在范围内;如果不能,则超出范围。在Java中,变量的作用域是声明它们的块({})。因此:

1234567891011121314151617181920void 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相对)是合格的,Java编译器将依次查找每个位置,直到找到匹配的位置:

对于最里面的块中具有该名称的变量 对于在下一个块中具有该名称的变量,依此类推 对于当前类中具有该名称的field2或方法(通常是:成员) 对于已导入包中具有该名称的类 对于具有该名称的包裹

该列表还有其他一些(我不会和初学者一起进入静态导入)。

还有很多其他方面,我建议您完成一些教程和/或一本Java入门书,以了解更多信息。

1"局部变量"与"变量"的比较-Java语言规范比大多数人在普通语言中使用"变量"的方式更为通用。当我在这个答案中说"变量"时,是指JLS所说的"局部变量"。

2"字段"-JLS在某些位置将字段称为"变量"(在其他位置将字段称为"字段"),因此在上面称为(1)。 :-)

相关讨论 我认为范围和可访问性根本不是一回事。 " scope "的关键是可以用一个非限定名称来引用该变量。因此,A.a可以从类B(位于单独的编译单元中)中的代码访问公共类a中的公共静态变量a,但是a不在类,除非将其静态导入到B \\的编译单元中。 @TedHopp:变量是等价的,这就是上面的答案主要涵盖的内容。我将在最后澄清该列表,的确是在谈论不合格的标识符。 我不认为您以与JLS一致的方式使用术语变量。例如,第4.12.3节确定了八类变量,包括类变量和实例变量(分别为static和non- static字段)。在谈论这些类型的变量时,作用域和访问之间没有对等关系。但是我同意OP可能在谈论局部变量,在这种情况下是等效的。 @TedHopp:我倾向于忘记JLS使用"变量",而我们大多数人使用"字段",谢谢。 (前几天我也刚想起它!)我将更新上面的内容以说局部变量。

来自Java语言规范的6.3节:

The scope of a declaration is the region of the program within which the entity declared by the declaration can be referred to using a simple name, provided it is visible.

这种范围的概念适用于Java中的多种实体:从局部变量到顶级类和包的所有内容。即使只是谈论变量,也有很多情况,从局部变量到从另一个类静态导入的字段,再到try语句的catch子句中的异常处理程序的参数。有关详细信息,请阅读JLS或在网络上搜索" Java范围",并阅读出现的有关该主题的许多教程中的一个或多个。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有