31

このトピックに関する投稿を行った後、私は少し混乱していることに気づきました。だからもう一度私はこれを求めています:

「Java コンストラクターは何か値を返しますか?」

私の本では値を返すことはできないと書かれていますが、私の教授は値を返すことができると言っており、常にそうしています。

コントロールは、何らかの値を持つ誰かに転送する必要があるため、無効ですか?

4

13 に答える 13

39

これは少し紛らわしいです: 実際、コンストラクターは値を返しません。するのはオペレーターnewです。ただし、コンストラクターは常にnew*と共に使用されるため、常に値を返す ように見えます。


*これは少し単純化したものです:リフレクションnewを通過する場合はコンストラクターを使用できます。ただし、同じメカニズムが機能します。

于 2013-02-06T19:45:21.820 に答える
8

混乱は純粋に表記上のものだと思います。コンストラクターを宣言するときは、次のようにします。

public class Foo {
    public Foo() {}
}

ここでは、明示的な戻り値はありません。

ただし、オブジェクトをインスタンス化するときの構文は次のとおりです。

Foo foo = new Foo();

これにより、メモリが割り当てられ、コンストラクターが呼び出されて、新しいオブジェクトが作成されます。ここで、結果は明らかに のインスタンスですFoo

明らかに矛盾する表記法を調整する 1 つの方法は、コンストラクターを構築中のオブジェクトを返すものと考えることですが、これは暗黙的に行われます。

于 2013-02-06T19:46:23.123 に答える
8

コンストラクターは、明示的な return ステートメントがない場合でも、それが属するクラスの新しいインスタンスを返します。

于 2013-02-06T19:44:57.173 に答える
5

コンストラクターは SPECIAL METHODS です。コンストラクタとメソッドの基本的な違いは、

コンストラクタ

  • クラスの名前と同じ名前を持つ
  • 戻り値の型がありません
  • オーバーロードできますが、オーバーライドできません。

一方

メソッド

  • クラスの名前と同じ名前の場合とない場合があります。
  • 戻り型を持つ
  • オーバーロードおよびオーバーライドできます。

メソッドの構文:
AccessModifier ReturnType Class(...)
EG: public static void main(String []args)

コンストラクタの構文:
AccessModifier No ReturnType Class(...)
EG: public static main(String []args)

ご注意ください:

Java は厳密に型指定された言語であるため、各関数には戻り値の型があり、コンストラクターは常にクラスのインスタンスを返します。

于 2014-08-29T15:18:08.497 に答える
1

そのため、コンストラクターが参照IDをそのクラスの参照変数に返すことに関心があります。例を挙げる:

class demo
{
    demo{}
}
class demo1
{
    public static void main(String as[])
    {
        demo d = new demo();
        System.out.println(d);
    }
}

出力: demo@7d4991ad コンストラクターによって返されるクラス demo のオブジェクト 'd' の参照 ID です。コンストラクターを定義しない場合、jvm はデフォルトのコンストラクターからこの ID を取得します。

次の行でクロスチェックできます: System.out.println(new demo()); 出力: demo@1b6d3586. すべてのオブジェクトにはメモリ内に個別のヒープ領域があるため、各オブジェクトの参照 ID も異なります。

于 2016-04-16T19:57:40.083 に答える
0

上記の2つの説明に同意し、より明確にするためにいくつかのステートメントを追加したいと思います。

質問:コンストラクターとは何ですか:回答:クラスと同じ名前のメソッドです。

質問:コンストラクターは何かを返しますか?回答:いいえ、無効でもありません。

質問:コンストラクターを呼び出す方法は?または、コンストラクターはどのように呼び出されますか?回答:NEWキーワードを使用してオブジェクトを作成します。

質問:オブジェクトを作成する方法は?回答:オブジェクトを作成する1つの方法は、オブジェクトのインスタンスを返すNEW演算子を使用することです。

于 2013-02-06T20:18:57.393 に答える
0

定義により、コンストラクターから値を返す可能性はありません。コンストラクターは戻り値の型をサポートしていません

于 2014-04-23T13:11:46.130 に答える
-1

コンストラクターは、非常に低いレベルでクラスの詳細な構造を返します (データとメソッドによって使用されるメモリ領域の量など) + コンストラクター内で記述されたコードを実行します。一方、 new 演算子はコンストラクターの戻り値をオペランドとして受け取り、実行時にメモリを割り当て、そのハンドラーをクラス変数に返します。

于 2016-04-05T16:15:26.783 に答える
-1

ワシをスケッチするように言われた状況を想像してみてください。

第 1 のシナリオ: どのように表示するかは指示されていません。あなたが知っているのは、ワシの簡単なスケッチを作ることだけです

2 番目のシナリオ: 使用する色とイーグルをスケッチする姿勢を正確に指示されます。

最初のシナリオは、デフォルトのコンストラクターが何をするかを正確に示しており、2 番目のシナリオは、オブジェクトの作成方法に関する情報を持っている場合です。しかし、鉛筆と紙を用意してスケッチを始めるまでは、何も返されません。

したがって、 new キーワードを使用してコンストラクターを呼び出すと、オブジェクトが取得されます。明示的に何かを返すのではなく、クラスのインスタンスとして使用できるものを作成または構築します。

于 2014-10-31T06:23:53.100 に答える
-3

暗黙的にコンストラクターはクラス型を返します........

于 2014-01-16T07:49:44.990 に答える