在Java中变量分为成员变量(或全局变量)和局部变量两种,概念不多说了。当为变量命名的时候,什么时候才是变量命名重复呢?
看这段代码:
public class Test
{
private int a = 3;
private void testDefi()
{
//!1:下一句代码会犯变量命名重复的错误吗?
private int a = 4;
//!2:下一句代码输出什么?
System.out.println(“a=”+a);
}
public static void main(String[] args)
{
Test t = new Test();
t.testDefi();
}
}
上面程序结果:a=4
所以,上面!1处并没有变量命名重复的错误。
变量命名重复就是当你在同一个作用域范围里面,重复定义了一个名称(标识符)相同的变量时,出现此错误。所谓同一个作用域,简单地理解就是同一对花括号之间。
之所以在不同作用域定义相同变量名不会出错的原因是因为JVM在调用该变量时,查找顺序是:先找同一作用域的变量,再找上一级作用域的变量,直到找到一个为止。所以,像在上面代码里面那样命名,并不会让JVM分辨不清。
如果要调用在不同作用域里面同名的变量,方法是:直接变量名 调用当前方法里的同名变量;this. 变量名 调用上一级作用域的同名变量;类名.this.变量名 调用上上级作用域的同名变量。
如认为本文章有错,欢迎留言讨论!