gpt4 book ai didi

java - Java中的 'scope'是什么?

转载 作者:行者123 更新时间:2023-12-02 04:42:45 25 4
gpt4 key购买 nike

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

作为一个初学者,我不知道这意味着什么。那么,处于范围之内意味着什么呢?而且,如果变量不在作用域内,如何使其在作用域内?

最佳答案

如果代码可以访问局部变量1,则该变量“在作用域内”;如果不能访问,则该局部变量就在“作用域外”。在 Java 中,变量的作用域为声明它们的 block ( {} )。因此:

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):

  1. 代码可以访问q因为q与代码在同一 block 中声明; tt 可以访问 a因为它是在包含 block 中声明的。

  2. 代码可以访问q因为它是在包含 block 中声明的;它可以访问 a因为它在下一个街区。

  3. 代码可以访问a ,但不是q ,因为q未在 block 或包含它的任何 block (或其他一些内容)中声明。

当弄清楚什么是不合格标识符时(如上面的 aq ,而不是 foo 中的 this.footoLowerCase 中的 q.toLowerCase ,它们是合格的 em>)是,Java 编译器将逐个查找这些位置,直到找到匹配项:

  • 对于最内 block 中具有该名称的变量
  • 对于下一个 block 中具有该名称的变量,依此类推
  • 对于当前类中具有该名称的字段2方法(通常:成员)
  • 对于已导入的包中具有该名称的类
  • 对于具有该名称的包

该列表还有其他一些内容(我不会向初学者介绍静态导入)。

还有很多内容需要考虑,我建议阅读一些教程和/或一本 Java 入门书籍来了解更多内容。

<小时/>

1 “局部变量”与“变量” - Java Language Specification使用“变量”的方式比大多数人在日常言语中的使用方式更普遍。当我在这个答案中说“变量”时,我指的是 JLS 所说的“本地变量”。

2 “字段” - JLS 在某些地方将字段称为“变量”(在其他地方称为“字段”),因此是上面的 (1)。 :-)

关于java - Java中的 'scope'是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56506841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com