在Java中,变量的“同名变量的屏蔽原则”通常指的是变量作用域的问题。当在不同的作用域中定义了同名的变量时,内部作用域的变量会“屏蔽”外部作用域的变量。这意味着在内部作用域中访问该变量名时,将会访问到内部作用域中定义的变量,而不是外部作用域中的变量。
下面是一个简单的示例,展示了变量的屏蔽原则:
public class VariableShadowingExample {
int outerVar = 10; // 定义一个类变量
public void methodOne() {
int outerVar = 20; // 定义一个方法变量,与类变量同名
System.out.println("In methodOne, outerVar = " + outerVar); // 输出20
methodTwo();
}
public void methodTwo() {
int outerVar = 30; // 定义一个方法变量,与类变量和methodOne中的变量同名
System.out.println("In methodTwo, outerVar = " + outerVar); // 输出30
}
public static void main(String[] args) {
VariableShadowingExample v = new VariableShadowingExample();
int outerVar = 40; // 定义一个局部变量,与类变量同名
System.out.println("In main, outerVar = " + outerVar); // 输出40
v.methodOne();
}
}
在这个示例中,我们定义了一个类变量outerVar,然后在methodOne方法中定义了一个同名的局部变量,接着在methodOne方法内部调用的methodTwo方法中又定义了一个同名的局部变量。最后,在main方法中也定义了一个同名的局部变量。
输出结果将会是:
In main, outerVar = 40
In methodOne, outerVar = 20
In methodTwo, outerVar = 30
从输出结果可以看出,每个作用域中的outerVar变量都屏蔽了外部作用域中的同名变量。