Java默認構造函數


Answers

如果您沒有在類中定義任何構造函數,則會創建一個默認的構造函數。 它只是一個沒有任何參數的構造函數。 編輯:除了調用super()

public Module(){
}
Question

什麼是一個默認的構造函數 - 你能告訴我哪一個是一個默認的構造函數,以及與其他構造函數有什麼不同?

public Module() {
   this.name = "";
   this.credits = 0;
   this.hours = 0;
}

public Module(String name, int credits, int hours) {
   this.name = name;
   this.credits = credits;
   this.hours = hours;
}



默認的構造函數不帶任何參數:

public class Student { 
    // default constructor
    public Student() {   

    }
}



默認構造函數指的是在沒有任何程序員定義的構造函數的情況下由編譯器自動生成的構造函數。

如果程序員沒有提供構造函數,編譯器會隱式聲明一個調用super()的默認構造函數,沒有throws子句,也沒有形式參數。

例如

class Klass {
      // Default Constructor gets generated
} 

new Klass();  // Correct
-------------------------------------

class KlassParameterized {

    KlassParameterized ( String str ) {   //// Parameterized Constructor
        // do Something
    }
} 

new KlassParameterized(); //// Wrong  - you need to explicitly provide no-arg constructor. The compiler now never declares default one.


--------------------------------

class KlassCorrected {

    KlassCorrected (){    // No-arg Constructor
       /// Safe to Invoke
    }
    KlassCorrected ( String str ) {   //// Parameterized Constructor
        // do Something
    }
} 

new KlassCorrected();    /// RIGHT  -- you can instantiate



你好。 根據我的知識,讓我清除默認構造函數的概念:

編譯器自動為任何沒有構造函數的類提供一個無參數的默認構造函數。 這個默認構造函數將調用超類的無參構造函數。 在這種情況下,如果超類沒有沒有參數的構造函數,編譯器會報錯,所以你必須驗證它是否有效。 如果你的類沒有顯式的超類,那麼它有一個Object的隱式超類,它有一個無參數的構造函數。

我從Java教程中閱讀這些信息。




一般的術語是,如果你沒有在你的對像中提供任何構造函數,那麼就會自動放置一個叫做默認構造函數的無參數構造函數。

如果你確實定義了一個構造函數,如果你不提供任何構造函數,那麼它通常被稱為沒有參數構造函數。只是一個約定,儘管一些程序員喜歡把這個顯式定義的沒有參數構造函數作為默認構造函數。 但是,如果我們明確地定義一個,而不是默認的。

根據文檔

如果一個類不包含構造函數聲明,那麼隱式聲明一個沒有形式參數和沒有throws子句的默認構造函數。

public class Dog
{
}

會自動被修改(通過添加默認構造函數)如下

public class Dog{
    public Dog() {

    }
} 

當你創建它的對象

 Dog myDog = new Dog();

這個默認的構造函數被調用。