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
廣告