Java中有兩種特殊的代碼塊:靜態(tài)代碼塊和代碼塊。它們在類加載時都會被執(zhí)行,但是它們的執(zhí)行順序略有不同。下面我們來詳細介紹它們的加載順序。
public class Test { static { System.out.println("靜態(tài)代碼塊1"); } static { System.out.println("靜態(tài)代碼塊2"); } { System.out.println("代碼塊1"); } { System.out.println("代碼塊2"); } public Test() { System.out.println("構(gòu)造方法"); } public static void main(String[] args) { new Test(); } }
以上是一個簡單的Java類,其中含有兩個靜態(tài)代碼塊、兩個代碼塊和一個構(gòu)造方法。在上述代碼中,靜態(tài)代碼塊的執(zhí)行順序是從上到下,而代碼塊的執(zhí)行順序是每次對象創(chuàng)建時都會按照順序執(zhí)行。
對于上述代碼,執(zhí)行的結(jié)果如下:
靜態(tài)代碼塊1 靜態(tài)代碼塊2 代碼塊1 代碼塊2 構(gòu)造方法
從上述結(jié)果中可以看出,首先執(zhí)行的是所有靜態(tài)代碼塊,然后執(zhí)行的是所有代碼塊,最后執(zhí)行的是構(gòu)造方法。
總結(jié):靜態(tài)代碼塊的執(zhí)行順序是在類加載時,從上到下順序執(zhí)行;而普通代碼塊的執(zhí)行順序是每次創(chuàng)建對象時,都會按照順序執(zhí)行。