構造方法是只有你在new對象的時候才會執行,靜態語句塊和靜態方法在類加載到內存的時候就已經執行了
,另外,靜態語句塊只能給靜態變量賦值,里面不能出現方法,同樣,靜態方法里面也不能出現靜態語句塊
追問:
調用靜態方法之前是不是先執行了靜態語句塊呢
追答:
對,先是靜態語句塊執行,然后靜態方法加載到內存.
靜態語句塊你不管它它自動會執行,而靜態方法它一直存在於內存中,只有你用類名點方法名的時候才會執行
public class ExA { static { System.out.println("父類--靜態代碼塊"); } public ExA() { System.out.println("父類--構造函數"); } { System.out.println("父類--非靜態代碼塊"); } public static void main(String[] args) { new ExB(); } } class ExB extends ExA { static { System.out.println("子類--靜態代碼塊"); } { System.out.println("子類--非靜態代碼塊"); } public ExB() { System.out.println("子類--構造函數"); } } 執行結果 ===== 父類--靜態代碼塊 子類--靜態代碼塊 父類--非靜態代碼塊 父類--構造函數 子類--非靜態代碼塊 子類--構造函數