HOWTO · Java
Java のデフォルトコンストラクタ
この記事では、デフォルトのコンストラクターが Java でどのように機能するかを紹介します。
Java 言語では、コンストラクターという用語は、プログラミングで実行するメソッドに似ています。コンストラクターの作成時に留意する必要のあるいくつかのプロパティがあります。
- コンストラクターの名前は、常にクラス名の名前と同じである必要があります。
- コンストラクターの戻り型があってはなりません。
- クラスには、パラメーター化されたコンストラクターと
引数なしコンストラクター(デフォルトのコンストラクター)を含めることができます。 - オブジェクトがインスタンス化されると、コンストラクターは常に呼び出されます。
- コンストラクターは、
abstract、static、final、およびsynchronizedのようなキーワードを使用しないでください。
Java のデフォルトコンストラクタ
Java のデフォルトコンストラクタは、引数なしコンストラクタと呼ばれることがよくあります。以下では、コードブロックをチェックして、Java のデフォルトコンストラクターを理解できます。
public class Main {
public static void main(String[] args) {
B b = new B();
System.out.println(b.a);
}
}
class B {
int a;
}
上記のコードブロックでは、2つのクラスがあることがわかります。1つは main メソッドを保持し、もう 1つはコンストラクターの機能を表すために作成されています。
main 関数はプログラムのエントリポイントであり、ここから実行が開始されます。したがって、ドライバークラスステートメント new B() は、B クラスのパブリック no-argument コンストラクターを呼び出します。指定されたコンストラクターの明示的な定義がなかったため、コンパイラーは独自にデフォルトコンストラクターを作成し、上記のステートメントでそれを呼び出します。
コンストラクターは、クラスの変数を初期化します。コンストラクターが定義されていない場合、コンパイラーは変数の値をデフォルトに初期化します。B クラスの変数 a が println 関数で参照されると、出力される値は以下の出力になります。
出力:
0
Java のパラメーター化されたコンストラクター
パラメーター化されたコンストラクターの使用は、オブジェクトの作成時にパラメーターの数を渡すことです。以下は、その機能を示すコードブロックです。
public class Main {
public static void main(String[] args) {
A a = new A(1, "One");
System.out.println(a.a + " " + a.b);
// A a1= new A();
}
}
class A {
int a;
String b;
A(int a, String b) {
this.a = a;
this.b = b;
}
}
上記のコードブロックで、A はパラメーター化されたコンストラクターを示すクラスです。もう 1つは、main メソッドを保持するクラスです。関数内で、new A(1, "One") ステートメントは、A クラスのパラメーター化されたコンストラクターを内部的に呼び出します。作成されたオブジェクトはクラスの参照に割り当てられ、コンストラクターの定義はクラスで定義されます。
コンストラクターA(int a, String b) は、a 変数と b 変数の値を初期化します。パラメータで渡された値は、変数にコピーされます。println 関数で、参照変数を使用すると、A クラスのクラス変数が呼び出されます。インスタンス化された値を、間にスペースを追加して出力に出力します。
その隣にコメント文があります。//演算子を使用して実行されたステートメントについてコメントします。ステートメント new A() は、クラスの引数なしコンストラクターを内部的に見つけようとします。コンパイラーがデフォルトのコンストラクターを見つけられない場合は、デフォルトのコンストラクターを作成できます。
この機能は、明示的なコンストラクターが定義されていない場合に限定されます。したがって、この場合、ユーザーは no-args コンストラクターを手動で作成する必要があります。A a1= new A(); 関数はコンパイル時エラーをスローします。この問題を解決するための 2つのオプションは、デフォルトコンストラクターを作成するか、既存のステートメントをブレークに導く既存のパラメーター化されたコンストラクターの署名を変更することです。したがって、その行はコメント化されています。
出力:
1 One