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+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告