gpt4 book ai didi

Java 嵌套作用域和变量名隐藏

转载 作者:太空狗 更新时间:2023-10-29 23:35:38 24 4
gpt4 key购买 nike

我正在学习在 Java 中查找名称,并且来自 C++ 我发现有趣的是,即使 Java 让我嵌套了很多代码块,我也只能在第一个嵌套范围内隐藏名称:

// name hiding-shadowing: local variables hide names in class scope

class C {

int a=11;

{
double a=0.2;

//{
// int a; // error: a is already declared in instance initializer
//}

}

void hide(short a) { // local variable a,hides instance variable
byte s;
for (int s=0;;); // error: s in block scope redeclares a
{
long a=100L; // error: a is already declared in (method) local scope
String s; //error: s is alredy defined in (method) local scope
}
}

}

从 C++ 的角度来看,这很奇怪,因为在那里我可以嵌套我想要的范围,并且我可以根据需要隐藏变量。这是 Java 的正常行为还是我遗漏了什么?

最佳答案

这与“第一个嵌套作用域”无关——这是 Java 允许局部变量隐藏字段但不允许它隐藏另一个局部变量的问题。据推测,Java 的设计者认为这种隐藏不利于可读性。

请注意,您在实例初始值设定项中的局部变量示例不会产生错误 - 此代码有效:

class C {
int a = 11;

{
// Local variable hiding a field. No problem.
double a = 0.2;
}
}

关于Java 嵌套作用域和变量名隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32819537/

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