Java中對象的初始化

    對象的初始化順序: 首先執行父類靜態的內容,父類靜態的內容執行完畢後,接着去執行子類的靜態的內容,當子類的靜態內容執行完畢以後,再去看父類有沒有非靜態代碼塊,若是有就執行父類的非靜態代碼塊,父類的非靜態代碼塊執行完畢,接着執行父類的構造方法;父類的構造方法執行完畢以後,它接着去看子類有沒有非靜態代碼塊,若是有就執行子類的非靜態代碼塊。子類的非靜態代碼塊執行完畢再去執行子類的構造方法。總之一句話,靜態代碼塊內容先執行,接着執行父類非靜態代碼塊和構造方法,而後執行子類非靜態代碼塊和構造方法。java

 public class F_Test {
  {
      System.out.println("father not_static");
  }
  static
  {
      System.out.println("father static");
  }
  public F_Test(){
      System.out.println("father constructed");
  }
}
public class S_Test extends F_Test {
    {
        System.out.println("son not_static");
    }
    static
    
    {
        System.out.println("son static");
    }
     public S_Test(){
        System.out.println("son constructed");
    }
    public static void main(String[] args) {
        new S_Test();
    } 
   }
//將輸出 
father static
son static
father not_static
father constructed
son not_static
son constructed

      注意:   子類的構造方法,無論這個構造方法帶不帶參數,默認的它都會先去尋找父類的不帶參數的構造方法。若是父類沒有不帶參數的構造方法,那麼子類必須用supper關鍵子來調用父類帶參數的構造方法,不然編譯不能經過。web

 public class F_Test {
  {
      System.out.println("father not_static");
  }
  static
  {
      System.out.println("father static");
  }
  public F_Test(String name){
      System.out.println("father constructed"+"【"+name+"】");
  }
}
 public class S_Test extends F_Test {
    public S_Test(String name) {
        super(name);
    }
    {
        System.out.println("son not_static");
    }
    static
    
    {
        System.out.println("son static");
    }
    public static void main(String[] args) {
        new S_Test("Supper");
    } 
}
相關文章
相關標籤/搜索