資源描述:
《java虛擬機 類初始化 階段》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Java虛擬機類初始化階段 在學(xué)習(xí)編程的過程中,我覺得不止要獲得課本的知識,更多的是通過學(xué)習(xí)技術(shù)知識提高解決問題的能力,這樣我們才能走在最前方,更多Java學(xué)習(xí),請登陸瘋狂java官網(wǎng)?! ava虛擬機使用某個類的過程,可分為七個階段: 加載-驗證-準(zhǔn)備-解析-初始化-使用-卸載 本文只介紹在什么情況下對類進(jìn)行初始化?! ava虛擬機規(guī)范對何時進(jìn)行類的初始化做了嚴(yán)格規(guī)范,有且只有四種情況: 1.虛擬機啟動時,指定的主類。 包含main方法的類。 2.遇到new、getstatic、putstatic、invokestatic四條指令時?! ew
2、:使用new關(guān)鍵字實例化對象。 getstatic:讀引用一個類的靜態(tài)字段?! utstatic:寫引用一個類的靜態(tài)字段?! nvokestatic:調(diào)用一個類的靜態(tài)方法。 3.初始化一個類時,先初始化其父類?! 〗涌趧t不是,只有真正引用到了父接口時,才會初始化?! ?.對類進(jìn)行反射調(diào)用時?! y試代碼: MainClass: [java]viewplaincopy packagecom.xuefeng.jvm.load; /** *初始化類的時機 *1.虛擬機啟動時指定的主類 *2.new某類的對象時、引用某類的static變量時、設(shè)置某
3、類的變量時、調(diào)用某類的static方法時 *3.初始化一個類時,先初始化其父類。接口則不是,真正使用到了父接口時,才會初始化父接口。 *4.通過反射調(diào)用某類時 *@authorxuefeng publicclassMainClass{ static{ System.out.println("MainClassinit."); } //1 publicstaticvoidmain(String[]args)throwsClassNotFoundException{ ////2 //System.out.println("SuperClass.
4、F_V1:"+SuperClass.F_V1); //System.out.println("SuperClass.v1:"+SuperClass.v1); ////3 //SubClasss1=newSubClass(); //3.1如果通過子類名引用父類的static變量,是否會觸發(fā)子類的初始化? //這取決于具體的虛擬機實現(xiàn),SunHotSpot虛擬機此時是不會觸發(fā)子類的初始化的?! ystem.out.println(SubClass.v1); //4 Class.forName("com.xuefeng.jvm.load.SubClas
5、s"); } } SuperClass: [java]viewplaincopy packagecom.xuefeng.jvm.load; publicclassSuperClass{ static{ System.out.println("SuperClassinit."); } /** *引用v1時,會初始化SuperClass */ publicstaticintv1=1; /** *引用F_V1時,不會初始化SuperClass *staticfinal的變量,已經(jīng)在編譯器放到了常量池里 */ publicstatic
6、finalintF_V1=1; } SubClass: [html]viewplaincopy packagecom.xuefeng.jvm.load; /** *@authorxuefeng * */ publicclassSubClassextendsSuperClass{ static{ System.out.println("SubClassinit."); } } 瘋狂Java培訓(xùn)專注軟件開發(fā)培訓(xùn),提升學(xué)員就業(yè)能力,重點提升實踐動手能力。技術(shù)知識沉淀深厚的老師,讓你感受Java的魅力,激發(fā)你對于編程的熱愛,讓你在半年的時間內(nèi)
7、掌握8-10萬的代碼量,掌握J(rèn)ava核心技術(shù),成為真正的技術(shù)高手;通過大量全真企業(yè)項目瘋狂訓(xùn)練,迅速積累項目經(jīng)驗。讓你成為技能型的現(xiàn)代化高端人才,迅速獲得高薪就業(yè)!時間不等人,趕緊聯(lián)系我們吧!