gpt4 book ai didi

java - 在 Java 中命名两种作用域

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:32 25 4
gpt4 key购买 nike

我很难命名我在 Java 中看到的两种范围:

class Fun {
int f = 1;
void fun() {
int f = 2;
while(true){
int f = 3;
int g = 1;
}
int g = 2;
}
}

这种情况主要是 f = 3g = 2

while 语句不会引入新的作用域,因此我无法创建名为 f 的 while-local 变量。但是如果我创建一个名为 g 的局部变量,那么我可以在循环后“重新创建”它。为什么?我知道它不再可访问,但如果编译器检查可访问性,那么它几乎会检查范围..

所以我想知道这是怎么回事,这些概念叫什么?和C++一样吗?


我刚刚设法安装了 g++ 并亲自试用了它:

#include <iostream>
using namespace std;

int main(){
int f = 0;
for(int i=0; i<1; i++){
int f = 1;
cout << f << endl;
{
int f = 2;
cout << f << endl;
}
}
cout << f << endl;
}

显然 C++ 对所有作用域一视同仁!

最佳答案

一旦您离开 while{} 循环,g 就会在您离开它时立即超出范围。然后再次声明 g 是有效的。

局部变量仅在声明它们的 block 的持续时间内处于范围内。

进入更多细节:

  • 第一个f 是对象作用域。它完全可以从对象访问次。
  • 第二个f 是本地作用域。您使用 f 访问它,您仍然可以使用 this.f 访问对象范围 f
  • 第三个 f 正在尝试创建第二个本地作用域 f。那是无效的。

  • 第一个 g 正在创建一个本地作用域 g

  • 第二个 g 正在创建第二个本地范围 g 但第一个已经超出范围并消失了。

所以唯一无效的声明是第三个 f。

还有第三种类型的作用域,它是声明静态变量的地方——这些是在类的每个实例之间共享的变量。

类型有很多名称,最常见的一些名称是局部变量、实例变量(也称为字段)和类变量(也称为静态字段)。您也有方法参数,但这只是获取局部变量的另一种方式。

进一步阅读:

关于java - 在 Java 中命名两种作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20420636/

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