Javaのデフォルトコンストラクタ 質問する

Javaのデフォルトコンストラクタ 質問する

デフォルト コンストラクターとは正確には何ですか? 次のどれがデフォルト コンストラクターであり、他のコンストラクターと何が違うのか教えてください。

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;
}

ベストアンサー1

どちらでもありません。定義した場合、それはデフォルトではありません。

デフォルト コンストラクターは、別のコンストラクターを定義しない限り、自動的に生成される引数なしのコンストラクターです。初期化されていないフィールドはデフォルト値に設定されます。例では、型がStringint、でありint、クラス自体が public であると仮定すると、次のようになります。

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

これはまさに

public Module()
{}

これは、コンストラクターがまったくない場合とまったく同じです。ただし、少なくとも 1 つのコンストラクターを定義した場合、デフォルト コンストラクターは生成されません。

を参照してくださいJava仕様具体的には、セクション8.8.9. デフォルトコンストラクタJava言語仕様

クラスにコンストラクター宣言が含まれていない場合は、デフォルト コンストラクターが暗黙的に宣言されます。トップレベル クラス、メンバー クラス、またはローカル クラスのデフォルト コンストラクターの形式は次のとおりです。

  • デフォルト コンストラクターは、クラスと同じアクセス修飾子を持ちます。ただし、クラスにアクセス修飾子がない場合、デフォルト コンストラクターはパッケージ アクセスを持ちます (§6.6)。
  • デフォルト コンストラクターには、非プライベートの内部メンバー クラスを除いて、正式なパラメーターはありません。非プライベートの内部メンバー クラスでは、デフォルト コンストラクターは、クラスの直接囲むインスタンスを表す 1 つの正式なパラメーターを暗黙的に宣言します (§8.8.1、§15.9.2、§15.9.3)。
  • デフォルト コンストラクターにはthrows句がありません。

説明

技術的には、フィールドをデフォルト初期化するのはコンストラクタ(デフォルトまたはその他)ではありません。しかし、私は答えとして残しておきます。

  • 質問のデフォルトが間違っており、
  • これらが含まれているかどうかに関係なく、コンストラクターはまったく同じ効果を持ちます。

おすすめ記事