package demo;
public class Test3 { public static void main(String[] args) { new B().run(); }}
class A{ static{ System.out.PRintln("A static ;"); } { System.out.println("A defalult ;"); } A(){ System.out.println("A Class"); } void run(){ System.out.println("A run"); }}
class B extends A{ static{ System.out.println("B static ;"); } { System.out.println("B defalult ;"); } B(){ System.out.println("B Class"); } void run(){ System.out.println("B run"); }}
運行結果:
A static ;B static ;A defalult ;A ClassB defalult ;B ClassB run
總結 : 生命子類對象時 總是先去加載父類的靜態代碼塊,然后加載子類的靜態代碼塊(靜態代碼永遠是最先加載的),然后會加載父類中的默認代碼塊 和父類構造方法,然后是子類.
優先級: 靜態代碼塊>代碼塊>構造方法 父類優先于子類
注意: 新建子類對象時 必須會加載父類構造器!
新聞熱點
疑難解答