//執行順序:(優先級從高到低。)
靜態代碼塊>mian方法>構造代碼塊>構造方法。
其中靜態代碼塊只執行一次。構造代碼塊在每次創建對像是都會執行。
1.普通代碼塊
public static void main(String[] args) {/*普通代碼塊:*直接定義在在方法或語句中出現”{普通代碼的執行語句}“的就稱為普通代碼塊。 *普通代碼塊執行順序由他們在代碼中出現的次序決定--“先出現先執行”* */{ System.out.println("這裡是普通代碼塊A");}//new A();{ System.out.println("這裡是普通代碼塊B");}}執行結果:這裡是普通代碼塊A
這裡是普通代碼塊B
2.靜態代碼塊與構造代碼塊
在java中使用static關鍵字聲明的代碼塊。
常用於對類的初始化,每個靜態代碼塊只會執行一次(類在內存中加載時執行,類在內存中加載後類已經存在)由於JVM在加載類時會執行靜態代碼塊,所以靜態代碼塊先於主方法執行。如果類中包含多個靜態代碼塊,那麼將按照"先定義的代碼先執行,後定義的代碼後執行。
ps:
1 靜態代碼塊不能存在於任何方法體內。
2 靜態代碼塊不能直接訪問靜態實例變量和實例方法,需要通過類的實例對象來訪問。
構造塊:直接在類中定義且沒有加static關鍵字的代碼塊稱為{}構造代碼塊。
構造代碼塊在創建對象時被調用,每次創建對像都會被調用,並且構造代碼塊的執行次序優先於類構造函數。
public class structure {{System.out.println("這裡是普通代碼塊");//所有類中有一個默認的構造函數,這裡的代碼塊為構造代碼塊,在類中的對像被創建時執行}public static void main(String[] args) {/*普通代碼塊:*直接定義在在方法或語句中出現”{普通代碼的執行語句}“的就稱為普通代碼塊。 *普通代碼塊執行順序由他們在代碼中出現的次序決定--“先出現先執行”* */{System.out.println("這裡是普通代碼塊A");}new structure();//第二次類加載時靜態代碼塊不執行//new A();{System.out.println("這裡是普通代碼塊B");}}static{System.out.println("這裡是靜態代碼塊");}}執行結果:
這裡是靜態代碼塊//優先於主函數這裡是普通代碼塊A
這裡是普通代碼塊//類中的對像被創建時執行,每創建一次執行一次,在加一句new structure(); 執行結果為:
這裡是普通代碼塊B
3.概要總結
public class structure {{System.out.println("這裡是普通代碼塊");}public static void main(String[] args) {{System.out.println("這裡是普通代碼塊A");}//new structure();//new structure();new A();{System.out.println("這裡是普通代碼塊B");}}static{System.out.println("這裡是靜態代碼塊");}}class A{static{System.out.println("這裡是A中的普靜態代碼塊1");}{System.out.println("這裡是A中的普通代碼塊1");}{System.out.println("這裡是A中的普通代碼塊2");}}執行結果:
這裡是靜態代碼塊這裡是普通代碼塊A
這裡是A中的普靜態代碼塊1
這裡是A中的普通代碼塊1
這裡是A中的普通代碼塊2
這裡是普通代碼塊B
優先級總結:靜態代碼塊>Main()>構造代碼塊