static修飾符可以用來修飾類的成員變量、成員方法和代碼塊。
用static修飾的成員變量表示靜態變量,可以直接通過類名來訪問;
用static修飾的成員方法表示靜態方法,可以直接通過類名來訪問;
用static修飾的程序代碼塊表示靜態代碼塊,當Java虛擬機加載類時,就會執行該代碼塊。
static變量
???
??? (1)靜態變量與實例變量的區別:
靜態變量在內存中只有一個拷貝,運行時Java虛擬機只為靜態變量分配一次內存,在加載類的過程中完成靜態類變量的內存分配??梢灾苯油ㄟ^類名訪問靜態變量;
對于實例變量,每創建一個實例,就會為實例變量分配一次內存,實例變量可以在內存中有多個拷貝,互不影響。
??? (2)static變量,提供了全局變量的功能:
能被類的所有實例共享,可作為實例之間進行交流的共享數據;
如果類的所有實例都包含一個相同的常量屬性,可以把這個屬性定義為靜態常量類型,從而節省內存空間。
static方法
??? (1)靜態方法可訪問的內容
??? 靜態方法不需要實例化就可以被調用,因此在靜態方法中不能使用this, super關鍵字,也不能直接訪問所屬類的實例變量和實例方法,但是可以直接訪問所屬類的靜態變量和靜態方法。
??? (2)實例方法可訪問的內容
??? 在實例方法中可以直接訪問所屬類的靜態變量、靜態方法、實例變量和實例方法。
??? (3)靜態方法必須被實現
??? (4)作為程序入口的main()方法是靜態方法
???
??? main()方法必須用static修飾,這是因為把main()定義為靜態方法,可以使得Java虛擬機只要加載了main()方法所屬的類,就能執行main()方法,而無須先創建這個類的實例。
??? 在main()靜態方法也是不能直接訪問實例變量和實例方法的。
??? (5)方法的字節碼都位于方法區
???
??? 不管實例方法,還是靜態方法,它們的字節碼都位于方法區內。
static代碼塊
??? 類中可以包含靜態代碼塊,它不存在任何方法體中。在Java虛擬機加載類時會執行這些靜態代碼塊,每個靜態代碼塊只會被執行一次。
??? Tips:
Java虛擬機加載靜態代碼塊后,再執行main()方法;
類的構造方法用于初始化類的實例,而類的靜態代碼塊則可用于初始化類,給類的靜態變量賦初始化值。
靜態代碼塊與靜態方法一樣,也不能直接訪問類的實例變量和實例方法,而必須通過實例的引用來訪問它們。
posted on 2006-11-29 00:44
EricWong 閱讀(269)
評論(0) 編輯 收藏 所屬分類:
Java