Static 靜態:這裏主要記錄的是靜態程序塊和靜態方法 若是有些代碼必須在項目啓動的時候就執行,就須要使用靜態代碼塊,這種代碼是主動執行的;須要在項目啓動的時候就初始化可是不執行,在不建立對象的狀況下,能夠供其餘程序調用,而在調用的時候才執行,這須要使用靜態方法,這種代碼是被動執行的. 靜態方法在類加載的時候 就已經加載 能夠用類名直接調用。 靜態代碼塊和靜態方法的區別是: 靜態代碼塊是自動執行的; 靜態方法是被調用的時候才執行的. 靜態方法:若是咱們在程序編寫的時候須要一個不實例化對象就能夠調用的方法,咱們就能夠使用靜態方法,具體實現是在方法前面加上static,以下: public static void method(){} 在使用靜態方法的時候須要注意一下幾個方面: 在靜態方法裏只能直接調用同類中其餘的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員。這是由於,對於非靜態的方法和變量,須要先建立類的實例對象後纔可以使用,而靜態方法在使用前不用建立任何對象。(備註:靜態變量是屬於整個類的變量而不是屬於某個對象的) 靜態方法不能以任何方式引用this和super關鍵字,由於靜態方法在使用前不用建立任何實例對象,當靜態方法調用時,this所引用的對象根本沒有產生。 靜態程序塊:當一個類須要在被載入時就執行一段程序,這樣能夠使用靜態程序塊。 public class DemoClass { private DemoClass(){} public static DemoClass _instance; static{ if(null == _instance ){ _instance = new DemoClass(); } } public static DemoClass getInstance(){ return _instance; } } 這樣的程序在類被加載的時候就執行了static中的代碼。 Ps:java中類的裝載步驟: 在Java中,類裝載器把一個類裝入Java虛擬機中,要通過三個步驟來完成:裝載、連接和初始化,其中連接又能夠分紅校驗、準備和解析三步,除了解析外,其它步驟是嚴格按照順序完成的,各個步驟的主要工做以下: 所謂裝載就是尋找一個類或是一個接口的二進制形式並用該二進制形式來構造表明這個類或是這個接口的class對象的過程。其中類或接口的名稱是給定了的。 裝載:查找和導入類或接口的二進制數據; 連接:執行下面的校驗、準備和解析步驟,其中解析步驟是能夠選擇的; 校驗:檢查導入類或接口的二進制數據的正確性; 準備:給類的靜態變量分配並初始化存儲空間; 解析:將符號引用轉成直接引用; 初始化:激活類的靜態變量的初始化Java代碼和靜態Java代碼塊