このトピックに関する投稿を行った後、私は少し混乱していることに気づきました。だからもう一度私はこれを求めています:
「Java コンストラクターは何か値を返しますか?」
私の本では値を返すことはできないと書かれていますが、私の教授は値を返すことができると言っており、常にそうしています。
コントロールは、何らかの値を持つ誰かに転送する必要があるため、無効ですか?
このトピックに関する投稿を行った後、私は少し混乱していることに気づきました。だからもう一度私はこれを求めています:
「Java コンストラクターは何か値を返しますか?」
私の本では値を返すことはできないと書かれていますが、私の教授は値を返すことができると言っており、常にそうしています。
コントロールは、何らかの値を持つ誰かに転送する必要があるため、無効ですか?
これは少し紛らわしいです: 実際、コンストラクターは値を返しません。するのはオペレーターnew
です。ただし、コンストラクターは常にnew
*と共に使用されるため、常に値を返す
ように見えます。
new
を通過する場合はコンストラクターを使用できます。ただし、同じメカニズムが機能します。
混乱は純粋に表記上のものだと思います。コンストラクターを宣言するときは、次のようにします。
public class Foo {
public Foo() {}
}
ここでは、明示的な戻り値はありません。
ただし、オブジェクトをインスタンス化するときの構文は次のとおりです。
Foo foo = new Foo();
これにより、メモリが割り当てられ、コンストラクターが呼び出されて、新しいオブジェクトが作成されます。ここで、結果は明らかに のインスタンスですFoo
。
明らかに矛盾する表記法を調整する 1 つの方法は、コンストラクターを構築中のオブジェクトを返すものと考えることですが、これは暗黙的に行われます。
コンストラクターは、明示的な return ステートメントがない場合でも、それが属するクラスの新しいインスタンスを返します。
コンストラクターは SPECIAL METHODS です。コンストラクタとメソッドの基本的な違いは、
コンストラクタ
一方
メソッド
メソッドの構文:
AccessModifier ReturnType Class(...)
EG: public static void main(String []args)
コンストラクタの構文:
AccessModifier No ReturnType Class(...)
EG: public static main(String []args)
ご注意ください:
Java は厳密に型指定された言語であるため、各関数には戻り値の型があり、コンストラクターは常にクラスのインスタンスを返します。
そのため、コンストラクターが参照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 も異なります。
上記の2つの説明に同意し、より明確にするためにいくつかのステートメントを追加したいと思います。
質問:コンストラクターとは何ですか:回答:クラスと同じ名前のメソッドです。
質問:コンストラクターは何かを返しますか?回答:いいえ、無効でもありません。
質問:コンストラクターを呼び出す方法は?または、コンストラクターはどのように呼び出されますか?回答:NEWキーワードを使用してオブジェクトを作成します。
質問:オブジェクトを作成する方法は?回答:オブジェクトを作成する1つの方法は、オブジェクトのインスタンスを返すNEW演算子を使用することです。
定義により、コンストラクターから値を返す可能性はありません。コンストラクターは戻り値の型をサポートしていません
コンストラクターは、非常に低いレベルでクラスの詳細な構造を返します (データとメソッドによって使用されるメモリ領域の量など) + コンストラクター内で記述されたコードを実行します。一方、 new 演算子はコンストラクターの戻り値をオペランドとして受け取り、実行時にメモリを割り当て、そのハンドラーをクラス変数に返します。
ワシをスケッチするように言われた状況を想像してみてください。
第 1 のシナリオ: どのように表示するかは指示されていません。あなたが知っているのは、ワシの簡単なスケッチを作ることだけです
2 番目のシナリオ: 使用する色とイーグルをスケッチする姿勢を正確に指示されます。
最初のシナリオは、デフォルトのコンストラクターが何をするかを正確に示しており、2 番目のシナリオは、オブジェクトの作成方法に関する情報を持っている場合です。しかし、鉛筆と紙を用意してスケッチを始めるまでは、何も返されません。
したがって、 new キーワードを使用してコンストラクターを呼び出すと、オブジェクトが取得されます。明示的に何かを返すのではなく、クラスのインスタンスとして使用できるものを作成または構築します。
暗黙的にコンストラクターはクラス型を返します........