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

更新于: 2019-07-30

5K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告