詳解Java中類的加載順序
本文介紹的是Java中類的加載順序,下面來看看詳細的介紹:
1、虛擬機在首次加載Java類時,會對靜態(tài)初始化塊、靜態(tài)成員變量、靜態(tài)方法進行一次初始化
2、只有在調用new方法時才會創(chuàng)建類的實例
3、類實例創(chuàng)建過程:按照父子繼承關系進行初始化,首先執(zhí)行父類的初始化塊部分,然后是父類的構造方法;再執(zhí)行本類繼承的子類的初始化塊,最后是子類的構造方法
4、類實例銷毀時候,首先銷毀子類部分,再銷毀父類部分
示例
public class Parent { public static int t = parentStaticMethod2(); { System.out.println("父類非靜態(tài)初始化塊"); } static { System.out.println("父類靜態(tài)初始化塊"); } public Parent() { System.out.println("父類的構造方法"); } public static int parentStaticMethod() { System.out.println("父類類的靜態(tài)方法"); return 10; } public static int parentStaticMethod2() { System.out.println("父類的靜態(tài)方法2"); return 9; } @Override protected void finalize() throws Throwable { // TODO Auto-generated method stub super.finalize(); System.out.println("銷毀父類"); } }
public class Child extends Parent { { System.out.println("子類非靜態(tài)初始化塊"); } static { System.out.println("子類靜態(tài)初始化塊"); } public Child() { System.out.println("子類的構造方法"); } public static int childStaticMethod() { System.out.println("子類的靜態(tài)方法"); return 1000; } @Override protected void finalize() throws Throwable { // TODO Auto-generated method stub super.finalize(); System.out.println("銷毀子類"); } }
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Parent.parentStaticMethod(); // Child child = new Child(); } }
輸出
父類的靜態(tài)方法2 父類靜態(tài)初始化塊 父類類的靜態(tài)方法
類中static 方法在第一次調用時加載,類中static成員按在類中出現的順序加載。當調用靜態(tài)方法2時輸出
父類的靜態(tài)方法2 父類靜態(tài)初始化塊 父類的靜態(tài)方法2
注釋掉Parent.parentStaticMethod();
去掉注釋Child child = new Child();
父類的靜態(tài)方法2 父類靜態(tài)初始化塊 子類靜態(tài)初始化塊 父類非靜態(tài)初始化塊 父類的構造方法 子類非靜態(tài)初始化塊 子類的構造方法
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
SpringBoot?Security權限控制自定義failureHandler實例
這篇文章主要為大家介紹了SpringBoot?Security權限控制自定義failureHandler實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11