我正在学习 Java,我知道您不能将内部作用域中声明的变量命名为与外部作用域中声明的变量相同的名称,如下所示
public class Practice {
public static void main(String[] args){
int x = 10;
if (x == 10){
int x = 10;
}
}
}
但是,我注意到以下内容并不违法
public class Practice {
int x = 10;
public static void main(String[] args){
int x = 10;
if (x == 10) {
}
}
}
这不是声明了两次的变量吗?
这不是声明了两次的变量吗?
不它不是。因为两者属于不同的范围。x
在外面main
函数有类级别范围 while x
代替main
has 方法/函数级别范围.
不同作用域中的 2 个变量具有相同的名称是合法的。
请务必阅读§6.3。声明的范围来自JLS。以下是该部分的一些声明。
声明的范围是程序的区域,在该区域内
声明所声明的实体可以使用
简单的名称,只要它是可见的(第 6.4.1 节)。
声明被认为在某个特定点的范围内
当且仅当声明的范围包括该点时才执行程序。
块中局部变量声明的范围(第 14.4 节)是
声明出现的块的其余部分,从其开始
自己的初始化程序,并在右侧包含任何进一步的声明符
局部变量声明语句。
有很多与范围相关的概念,例如影子,所以请阅读§6.4。阴影和模糊.
JLS 是了解 Java 允许什么和不允许什么的最佳场所。请随意阅读那里的章节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)