Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java APIs 和框架

Java 類引用

Java 有用資源

Java - 變數作用域



變數的作用域是指在給定程式或函式中建立和訪問變數的區域。變數作用域也指其生命週期。

在本教程中,我們將學習不同型別Java 變數的作用域。

Java 例項變數的作用域

在類內但所有方法和塊之外宣告的變數是例項變數。例項變數的一般作用域是在整個類中,靜態方法除外。例項變數的生命週期直到物件保留在記憶體中。

示例

在下面的示例中,我們在 Puppy 類中定義了一個例項變數 puppyAge,並使用其 setAge() 方法修改它,並使用 getAge() 方法獲取它。此變數在 myPuppy 物件例項的生命週期內可用。

package com.tutorialspoint;

public class Puppy {
   private int puppyAge;
   
   public void setAge( int age ) {
      // access the instance variable and modify it	   
      puppyAge = age;
   }

   public int getAge( ) {
	  // access the instance variable  
      return puppyAge;
   }

   public static void main(String []args) {    
      Puppy myPuppy = new Puppy();
      myPuppy.setAge( 2 );
      System.out.println("Puppy Age :" + myPuppy.getAge() );
   }
}

編譯並執行程式。這將產生以下結果:

輸出

Puppy Age :2

Java 類(靜態)變數的作用域

在類內、所有塊之外宣告並標記為 static 的變數稱為類變數。類變數的一般作用域是整個類,類變數的生命週期直到程式結束或類載入到記憶體中。

示例

在下面的示例中,我們在 Puppy 類中定義了一個類變數 BREED。此變數在程式的生命週期內可用。由於其靜態特性,我們可以直接使用類名訪問它,如下所示

package com.tutorialspoint;

public class Puppy {
   private int puppyAge;
   public static String BREED="Bulldog";
   
   public void setAge( int age ) {
      // access the instance variable and modify it	   
      puppyAge = age;
   }

   public int getAge( ) {
	  // access the instance variable  
      return puppyAge;
   }

   public static void main(String []args) {    
      Puppy myPuppy = new Puppy();
      myPuppy.setAge( 2 );
      System.out.println("Puppy Age :" + myPuppy.getAge() );
      // access the class variable
      System.out.println("Breed :" + Puppy.BREED );
   }
}

編譯並執行程式。這將產生以下結果:

輸出

Puppy Age :2
Breed :Bulldog

Java 區域性變數的作用域

所有其他不是例項變數和類變數的變數都被視為區域性變數,包括方法中的引數。區域性變數的作用域在其宣告的塊內,區域性變數的生命週期直到控制離開其宣告的塊。

示例

在下面的示例中,我們在 Puppy 類的 main() 方法中定義了兩個區域性變數。這些變數在其宣告的方法或塊的生命週期內可用,並且可以如下所示訪問

package com.tutorialspoint;

public class Puppy {
   private int puppyAge;
   public static String BREED="Bulldog";
   
   public void setAge( int age ) {
      // access the instance variable and modify it	   
      puppyAge = age;
   }

   public int getAge( ) {
	  // access the instance variable  
      return puppyAge;
   }

   public static void main(String []args) {    
      Puppy myPuppy = new Puppy();
      myPuppy.setAge( 2 );
      System.out.println("Puppy Age :" + myPuppy.getAge() );
      // access the class variable
      System.out.println("Breed :" + Puppy.BREED );
	  
      // local variables
      int a = 10;
      int b = 20;
      
      int c = a + b;
      
      System.out.println("c: " + c);
   }
}

編譯並執行程式。這將產生以下結果:

輸出

Puppy Age :2
Breed :Bulldog
c: 30

關於變數作用域的重要幾點

  • 預設情況下,變數具有預設訪問許可權。預設訪問修飾符意味著我們沒有顯式宣告類的訪問修飾符、欄位方法 等。
  • 未宣告任何訪問控制修飾符的變數或方法可用於同一包中的任何其他類。介面中的欄位隱式為 public static final,介面中的方法預設情況下為 public。
  • Java 提供了許多訪問修飾符來設定類、變數、方法和建構函式的訪問級別。四個訪問級別為:
    • default - 對包可見。不需要修飾符。
    • private - 僅對類可見。
    • public - 對全世界可見。
    • protected - 對包及其所有子類可見。
廣告