首頁 >Java >java教程 >Java靜態變數與實例變數有什麼差別

Java靜態變數與實例變數有什麼差別

WBOY
WBOY轉載
2023-05-05 15:40:071736瀏覽

java類別的成員變數有兩個種:一個是被static關鍵字修飾的變量,叫類別變數或靜態變數;另一種沒有static修飾,為實例變數。

在語法定義上的差異:靜態變數前要加static關鍵字,而實例變數前則不加。

在程式執行時的差異:實例變數屬於某個物件的屬性,必須建立了實例對象,其中的實例變數才會被指派空間,才能使用這個實例變數。靜態變數不屬於某個實例對象,而是屬於類,所以也稱為類變量,只要程式載入了類的字節碼,不用創建任何實例對象,靜態變數就會被分配空間,靜態變數就可以被使用了。總之,實例變數必須在建立物件後才可以透過這個物件來使用,靜態變數則可以直接使用類別名稱來引用。

例如,對於下面的程序,無論創建多少個實例對象,永遠都只分配了一個staticVar變量,並且每創建一個實例對象,這個staticVar 就會加1;但是,每創建一個實例對象,就會被指派一個instanceVar,也就是可能被指派多個instanceVar,而每個instanceVar的值都只自加了1次。

public class VariantTest  {  public static int staticVar = 0;  public int instanceVar = 0;  public VariantTest()  {  staticVar++;  instanceVar++;  System.out.println(“staticVar = ”++staticVar “, instanceVar = ” ++instanceVar);  }  }

類別的靜態變數在記憶體中只有一個,java虛擬機在載入類別的過程中為靜態變數分配內存,靜態變數位於方法區,並被類別的所有實例共享。靜態變數可以直接透過類別名稱進行訪問,其生命週期取決於類別的生命週期。

而實例變數取決於類別的實例。每建立一個實例,java虛擬機就會為實例變數分配一次內存,實例變數位於堆區中,其生命週期取決於實例的生命週期。

public class Temp {  int t; //实例变量  public static void main(String args[]){  int t=1; //局部变量  System.out.println(t); //打印局部变量  Temp a= new Temp(); //创建实例  System.out.println(a.t); //通过实例访问实例变量  }  }

結果為:

1

0 (成員變數具有預設值而局部變數則沒有)

把程式碼改為:

public class Temp {  static int t; //类变量  public static void main(String args[]){  System.out.println(t); //打印类变量  int t=1; //局部变量  System.out.println(t); //打印局部变量  Temp a= new Temp(); //创建实例  System.out.println(a.t); //通过实例访问实例变量  }  }

結果則為

0

1

0

以上是Java靜態變數與實例變數有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除