Java基礎-關鍵字static

java類的成員變量有兩種:一種是被static關鍵字修飾的變量,叫類變量或者靜態變量;另一種沒有static修飾,爲實例變量。
  在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。
  在程序運行時的區別:實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量纔會被分配空間,才能使用這個實例變量。靜態變量不屬於某個實例對象,而是屬於類,所以也稱爲類變量,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量就可以被使用了。總之,實例變量必須創建對象後纔可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。
  例如,對於下面的程序,

無論創建多少個實例對象,永遠都只分配了一個staticVar變量,並且每創建一個實例對象,這個staticVar 就會加1;但是,每創建一個實例對象,就會分配一個instanceVar,即可能分配多個instanceVar,並且每個instanceVar的值都只自加了1次。
  類的靜態變量在內存中只有一個,java虛擬機在加載類的過程中爲靜態變量分配內存,靜態變量位於方法區,被類的所有實例共享。靜態變量可以直接通過類名進行訪問,其生命週期取決於類的生命週期。
  而實例變量取決於類的實例。每創建一個實例,java虛擬機就會爲實例變量分配一次內存,實例變量位於堆區中,其生命週期取決於實例的生命週期。

下面是一個自己的例子,便於理解。

public class TestStatic02 {
 static int staticX=1;
 int instanceY=1;
 public TestStatic02(){
  staticX++;
  instanceY++;
 }
 public static void main(String[] args) {
  System.out.println("staticX0============"+TestStatic02.staticX++);//1  staticX=2
  System.out.println("staticX1============"+(++TestStatic02.staticX));//3
  System.out.println("staticX2============"+staticX);//3
  TestStatic02 ts0 = new TestStatic02();
  System.out.println("staticX3============"+staticX);//4
  System.out.println("instanceY1============"+ts0.instanceY);//2
  TestStatic02 ts1 = new TestStatic02();
  System.out.println("staticX4============"+staticX);//5
  System.out.println("instanceY3============"+ts1.instanceY);//2
  TestStatic02 ts2 = new TestStatic02();
  System.out.println("staticX5============"+staticX);//6
  System.out.println("instanceY4============"+ts2.instanceY);//2
  TestStatic02 ts3 = new TestStatic02();//7
  System.out.println("staticX6============"+ts3.staticX);//7
  System.out.println("staticX7============"+staticX);//7
 }
}



 

發佈了39 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章