Static 靜態(tài):這里主要記錄的是靜態(tài)程序塊和靜態(tài)方法
如果有些代碼必須在項目啟動的時候就執(zhí)行,就需要使用靜態(tài)代碼塊,這種代碼是主動執(zhí)行的;需要在項目啟動的時候就初始化但是不執(zhí)行,在不創(chuàng)建對象的情況下,可以供其他程序調(diào)用,而在調(diào)用的時候才執(zhí)行,這需要使用靜態(tài)方法,這種代碼是被動執(zhí)行的. 靜態(tài)方法在類加載的時候 就已經(jīng)加載 可以用類名直接調(diào)用。
靜態(tài)代碼塊和靜態(tài)方法的區(qū)別是:
靜態(tài)代碼塊是自動執(zhí)行的;
靜態(tài)方法是被調(diào)用的時候才執(zhí)行的.
靜態(tài)方法:如果我們在程序編寫的時候需要一個不實例化對象就可以調(diào)用的方法,我們就可以使用靜態(tài)方法,具體實現(xiàn)是在方法前面加上static,如下:
public static void method(){}
在使用靜態(tài)方法的時候需要注意一下幾個方面:
在靜態(tài)方法里只能直接調(diào)用同類中其他的靜態(tài)成員(包括變量和方法),而不能直接訪問類中的非靜態(tài)成員。這是因為,對于非靜態(tài)的方法和變量,需要先創(chuàng)建類的實例對象后才可使用,而靜態(tài)方法在使用前不用創(chuàng)建任何對象。(備注:靜態(tài)變量是屬于整個類的變量而不是屬于某個對象的)
靜態(tài)方法不能以任何方式引用this和super關(guān)鍵字,因為靜態(tài)方法在使用前不用創(chuàng)建任何實例對象,當(dāng)靜態(tài)方法調(diào)用時,this所引用的對象根本沒有產(chǎn)生。
靜態(tài)程序塊:當(dāng)一個類需要在被載入時就執(zhí)行一段程序,這樣可以使用靜態(tài)程序塊。
public class DemoClass {
private DemoClass(){}
public static DemoClass _instance;
static{
if(null == _instance ){
_instance = new DemoClass();
}
}
public static DemoClass getInstance(){
return _instance;
}
}
這樣的程序在類被加載的時候就執(zhí)行了static中的代碼。
Ps:java中類的裝載步驟:
在Java中,類裝載器把一個類裝入Java虛擬機(jī)中,要經(jīng)過三個步驟來完成:裝載、鏈接和初始化,其中鏈接又可以分成校驗、準(zhǔn)備和解析三步,除了解析外,其它步驟是嚴(yán)格按照順序完成的,各個步驟的主要工作如下:
所謂裝載就是尋找一個類或是一個接口的二進(jìn)制形式并用該二進(jìn)制形式來構(gòu)造代表這個類或是這個接口的class對象的過程。其中類或接口的名稱是給定了的。
裝載:查找和導(dǎo)入類或接口的二進(jìn)制數(shù)據(jù);
鏈接:執(zhí)行下面的校驗、準(zhǔn)備和解析步驟,其中解析步驟是可以選擇的;
校驗:檢查導(dǎo)入類或接口的二進(jìn)制數(shù)據(jù)的正確性;
準(zhǔn)備:給類的靜態(tài)變量分配并初始化存儲空間;
解析:將符號引用轉(zhuǎn)成直接引用;
初始化:激活類的靜態(tài)變量的初始化Java代碼和靜態(tài)Java代碼塊
本篇文章來源于 Linux公社網(wǎng)站(www.linuxidc.com) 原文鏈接:http://www.linuxidc.com/Linux/2010-03/24783.htm