在Java中,
當(dāng)一個(gè)類被調(diào)用的時(shí)候,它的初始化過(guò)程是怎么樣的呢?
當(dāng)一個(gè)類被實(shí)例化的時(shí)候,它的初始化過(guò)程又是怎樣的呢?
為什么static方法不能未經(jīng)對(duì)象就調(diào)用非static方法?
下面我們通過(guò)例子來(lái)找出答案。
當(dāng)該類沒(méi)有父類時(shí) 測(cè)試代碼:
public class ClassLoadingTest { static String staticString=getStaticString(); //靜態(tài)成員變量 PRivate String privateString=getPrivateString();//普通成員變量 public ClassLoadingTest() { System.out.println("Loading ClassLoadingTest()"); } public static void loadStaticMethod() { System.out.println("Loading static method"); } private void loadNotStaticMethed(){ System.out.println("Loading NotStaticMethed"); } private String getPrivateString() { String string=new String("Loading private variable"); System.out.println(string); return string; } private static String getStaticString() { String string=new String("Loading static variable"); System.out.println(string); return string; } public static void main(String[] args) { loadStaticMethod(); //加載靜態(tài)方法 System.out.println("try to new ClassLoadingTest()"); ClassLoadingTest test=new ClassLoadingTest(); test.loadNotStaticMethed();//加載普通方法 }} 打印結(jié)果: Loading static variable Loading static method try to new ClassLoadingTest() Loading private variable Loading ClassLoadingTest() Loading NotStaticMethed分析結(jié)果:
當(dāng)一個(gè)類沒(méi)有父類的時(shí)候,加載順序?yàn)椋?/p>
靜態(tài)成員變量/靜態(tài)方法-->開始實(shí)例化-->普通成員變量/普通方法-->構(gòu)造方法-->實(shí)例化結(jié)束。
當(dāng)該類有父類的時(shí): 測(cè)試代碼:父類:
public class ClassLoadingTestSuper { static String staticString=getSuperStaticString(); //父類的靜態(tài)成員變量 private String privateString=getSuperPrivateString(); //父類的普通成員變量 public ClassLoadingTestSuper() { System.out.println("Loading ClassLoadingTestSuper()"); } private String getSuperPrivateString() { String string=new String("Loading super class private variable"); System.out.println(string); return string; } private static String getSuperStaticString() { String string=new String("Loading super class static variable"); System.out.println(string); return string; }}子類:
public class ClassLoadingTest extends ClassLoadingTestSuper {/*內(nèi)容與ClassLoadingTest相同*/} 打印結(jié)果:Loading super class static variableLoading static variableLoading static methodtry to new ClassLoadingTest()Loading super class private variableLoading ClassLoadingTestSuper()Loading private variableLoading ClassLoadingTest()Loading NotStaticMethed分析結(jié)果:
當(dāng)該類有父類的時(shí)候,類的實(shí)例化的加載過(guò)程是:
父類的static成員變量和方法-->該類的static變量和方法-->開始實(shí)例化-->父類的普通成員變量和方法-->父類的構(gòu)造方法-->該類的普通成員變量和方法-->該類的構(gòu)造方法-->實(shí)例化結(jié)束。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注