あなたが書くとき:
public Test()
{
System.out.println("constructor");
}
これは間違いなくコンストラクタです。そして、次のように記述して Test クラスの最初のオブジェクトを作成すると、
Test t1 = new Test();
これにより、コンストラクターが初めて呼び出され、print ステートメントで記述したコード、つまりコンストラクターがコンソールに出力されます。クラスのオブジェクトを作成すると、コンストラクターが自動的に呼び出されることに注意してください。
2 回目にオブジェクトを作成するには、次のように記述します。
Test t2 = new Test();
これは同じコンストラクターを呼び出し、同じ「コンストラクター」を画面に表示しますが、2 回目になります。
したがって、コンストラクターコンストラクターとして答えが得られます
2 番目のケースでは、次のように記述します。
public void test()
{
System.out.println("constructor");
}
コンパイラはそれをコンストラクタではなくメソッドとして扱います。
void が何も返さない場合でも、それは「戻り値の型」であり、コンストラクターは決して戻り値の型を持つことはできません。これは、何も返さないという意味ではありませんが、戻り値の型がないだけです。
そのため、クラスのオブジェクトが作成されたときにメソッドが自動的に呼び出されることはありません。したがって、同じ結果を期待するべきではありません。
コンパイラーは、定義していなくても、すべてのクラスにダミー/デフォルトのコンストラクターを提供するため、空の出力が得られます。そして、このデフォルトのコンストラクターは、明示的に呼び出すかどうかに関係なく、クラスのオブジェクトを作成するたびに呼び出されます!
デフォルトのコンストラクターは、次のようにどこかに書かれていると考えることができます。
test() { }
これで、2 つのオブジェクトを作成するとどうなるか想像できるようになりました。プログラムは正しくコンパイルおよび実行され、空の出力が返されます。
お役に立てば幸いです。