本文主要介紹類(lèi)加載的初始化和非初始化有什么區(qū)別(哪個(gè)更好?),下面一起看看類(lèi)加載的初始化和非初始化有什么區(qū)別(哪個(gè)更好?)相關(guān)資訊。
初始化
1.當(dāng)遇到四個(gè)字節(jié)碼指令:new、getstatic、putstatic或invokestatic時(shí),如果類(lèi)沒(méi)有初始化,應(yīng)該先觸發(fā)。生成這四條指令的常見(jiàn)java代碼場(chǎng)景有:用new關(guān)鍵字實(shí)例化對(duì)象時(shí),讀取或設(shè)置類(lèi)的靜態(tài)字段(用final修飾,除了已經(jīng)被編譯器放入常量池的靜態(tài)字段)時(shí),調(diào)用類(lèi)的靜態(tài)方法時(shí)。
2.使用java.lang.reflect包的方法對(duì)類(lèi)進(jìn)行反射調(diào)用時(shí),如果類(lèi)還沒(méi)有初始化,需要先觸發(fā)其初始化。
3.在初始化一個(gè)類(lèi)的時(shí)候,如果發(fā)現(xiàn)其父類(lèi)還沒(méi)有初始化,就需要先觸發(fā)其父類(lèi)的初始化。
4.虛擬機(jī)啟動(dòng)時(shí),用戶(hù)需要指定一個(gè)要執(zhí)行的main類(lèi)(包括main方法的類(lèi)),虛擬機(jī)會(huì)先初始化這個(gè)類(lèi)。
不會(huì)初始化。
父類(lèi)
包c(diǎn)om . zou . test9e;
公共類(lèi)f {static {system。out . println( 加載父類(lèi) );} public static int num = 10}
子類(lèi)
包c(diǎn)om . zou . test9e;
公共子類(lèi)擴(kuò)展f {static {system。out . println( 加載子類(lèi) );} public static final int a = 20}
1.-父類(lèi)的靜態(tài)字段被子類(lèi)引用,子類(lèi)不會(huì)被初始化。
包c(diǎn)om . zou . test9e;
公共類(lèi)main {
public static void main(string[]args){//todo自動(dòng)生成方法stub system . out . println(child . num);
}
}
2.-通過(guò)數(shù)組定義引用類(lèi)。
包c(diǎn)om . zou . test9e;
公共類(lèi)main {
public static void main(string[]args){//todo自動(dòng)生成的方法存根。
child[]c =新的子級(jí)[10];
}
}
3.-調(diào)用類(lèi)的常數(shù)
package com.zou.test9e
公共類(lèi)main {
public static void main(string[]args){//todo自動(dòng)生成的方法存根。
system . out . println(child . a);
}
}
標(biāo)簽:
初始化子類(lèi)
了解更多類(lèi)加載的初始化和非初始化有什么區(qū)別(哪個(gè)更好?)相關(guān)內(nèi)容請(qǐng)關(guān)注本站點(diǎn)。