首頁 > Java > java教程 > 主體

Java關鍵字之static的詳細詳情介紹

黄舟
發布: 2017-03-16 09:52:24
原創
1738 人瀏覽過

static 表示「全域」或「靜態」的意思,用來修飾成員變數成員方法,也可以形成靜態static程式碼區塊,但是Java語言中沒有全域變數的概念

被static修飾的成員變數和成員方法獨立於該類別的任何物件。也就是說,它不依賴類別特定的實例,被類別的所有實例共用。 只要這個類別被加載,

#Java虛擬機就能根據類別名稱在執行時間資料區的方法區內定找到他們。因此,static物件可以在它的任何物件建立之前訪問,無需引用任何物件。

用public修飾的static成員變數和成員方法本質是全域變數和全域方法,當宣告它類別的物件時,不產生static變數的副本,而是 類別的所有實例共用同一個static變數

static變數前可以有private修飾,表示這個變數可以在類別的靜態程式碼區塊中,或是類別的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用--廢話),但是不能在其他類別中透過類別名稱來直接引用,這一點很重要。其實你要搞明白,private是存取權限限定,static表示不要實例化就可以使用,這樣就容易理解多了。 static前面加上其它存取權限關鍵字的效果也以此類推。

static的一些特性:

(1) static變數也稱為靜態變數,靜態變數和非靜態變數的差異是:靜態變數被所有的物件所共享,在記憶體中只有一個副本,它當且僅當在類別初次載入時會被初始化。而非靜態變數是物件所擁有的,在建立物件的時候被初始化,存在多個副本,各個物件擁有的副本互不影響。

(2)statice有兩種作用:一、只想為某特定域分配單一的儲存空間,而不考慮要去建立多少對象,甚至不建立對象;二、希望某個方法不與包含他的任何物件關聯在一起,也就是不創建任何物件也能呼叫其中的任何方法。

(3)被statice修飾的任何成員變數和成員方法獨立於該類別的任何對象,它不依賴類別的任何對象,對所有實例共享。

(4)靜態變數在記憶體中只有一個拷貝,jvm只對靜態分配一次內存,載入類別的過程中就完成對靜態變數的記憶體分配,可用類別名稱直接訪問。

(5)靜態程式碼是和class綁定的,class裝載成功就表示執行了你的靜態程式碼,而且以後不會再走這套靜態程式碼了。 Class.forName()的作用是要求JVM查找並載入指定的類,也即是說JVM會執行該類別的靜態程式碼段。

(6)靜態的方法屬性初始化,是在載入類別的時候初始化。而非靜態方法屬性初始化。

範例:

public class Test {
     static int i;
     static
     {
          i++;
          System.out.println("outt i:"+i);
     }
     static void outi()
     {
            i++;
            System.out.println("output i:"+i);
     }
     public static void main(String [] argStrings)
     {
          Test test=new Test();
          test.outi();
     }
}
登入後複製

輸出結果:

outt i:1
output i:2
登入後複製



######################## ##########

以上是Java關鍵字之static的詳細詳情介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板