Java 中的变量遮蔽是什么?
在 Java 中,您可以声明三种类型的变量,即实例变量、静态变量和局部变量。
- 局部变量 - 在方法、构造函数或代码块内部定义的变量称为局部变量。变量将在方法内声明和初始化,并在方法完成时销毁。
- 实例变量 - 实例变量是类内部但在任何方法外部的变量。这些变量在类被实例化时初始化。可以从该特定类的任何方法、构造函数或代码块内部访问实例变量。
- 类(静态)变量 - 类变量是在类内部、任何方法外部,使用 static 关键字声明的变量。
变量遮蔽
如果实例变量和局部变量具有相同的名称,无论何时您在方法中打印(访问)它,都将打印局部变量的值(遮蔽实例变量)。
示例
在以下 Java 示例中,类 FieldShadowingExample 具有两个实例变量(name、age)和一个方法(display())。
在方法中,有两个变量与实例变量相同(name 和 type)。
当您在方法中调用 print(访问)它们时,将打印局部变量的值,从而遮蔽实例变量的值。
public class FieldShadowingExample{ String name = "Krishna"; int age = 25; public void display(){ String name = "Vishnu"; int age = 22; System.out.println("Name: "+name); System.out.println("age: "+age); } public static void main(String args[]){ new FieldShadowingExample().display(); } }
输出
Name: Vishnu age: 22
如果您仍然需要在方法中访问实例变量的值(在本例中),则需要使用 this 关键字(或对象)访问它们,如下所示:
示例
public class FieldShadowingExample{ String name = "Krishna"; int age = 25; public void display(){ String name = "Vishnu"; int age = 22; System.out.println("Name: "+name); System.out.println("age: "+age); System.out.println("Name: "+this.name); System.out.println("age: "+this.age); } public static void main(String args[]){ new FieldShadowingExample().display(); } }
输出
Name: Vishnu age: 22 Name: Krishna age: 25
广告