二、一個(gè)類在什么時(shí)候被加載?時(shí)機(jī) (延遲加載,能不加載就不加載) (1)new 一個(gè)對(duì)象的時(shí)候,加載 (2)沒有創(chuàng)建對(duì)象,訪問類中靜態(tài)成員(方法和屬性),加載 (3)聲明一個(gè)類的引用,不加載 (4)創(chuàng)建子類,先加載父類,再加載子類 (5)父類中的公開靜態(tài)方法,子類繼承,使用子類的類名調(diào)用此方法,加載父類 class Super{ public static m(){} } class Sub extends Super{} 在主函數(shù)中運(yùn)行以下代碼: Sub.m(); //加載了父類之后,虛擬機(jī)已經(jīng)知道m(xù)()方法的調(diào)用了,就不會(huì)再加載子類,延遲加載 (6)沒有創(chuàng)建對(duì)象,訪問類中靜態(tài)常量(能計(jì)算出結(jié)果的常量,在編譯的時(shí)候會(huì)用計(jì)算出來的結(jié)果替換表達(dá)式),不加載 沒有創(chuàng)建對(duì)象,訪問類中靜態(tài)常量(不確定的值),加載 (7)CoreJava day16
三、設(shè)計(jì)模式(編程套路) GOF(Group Of Four)四人幫模式 23種
1、單例模式 Singleton:
class A{ private static A a = new A(); //私有靜態(tài)的實(shí)例變量指向自己,在類加載時(shí)創(chuàng)建唯一對(duì)象 public static A newInstance(){ //提供公開靜態(tài)的訪問點(diǎn),回返唯一實(shí)例 return a; } private A(){} //私有的構(gòu)造方法,防止濫用 }
注意:final,不能用來修飾構(gòu)造方法。 在父類中如果有常量屬性,在子類中使用常量屬性時(shí)是不會(huì)進(jìn)行父類的類加載。 靜態(tài)常量如果其值可以確定,就不會(huì)加載該類,如果不能確定則會(huì)加載該常量所在的類。 class Super{ private final void m(){} //用final可以證明出private的方法不繼承給子類 } class Sub extends Super{ public void m(){} //不是方法的覆蓋 }