すべての Object クラスのメソッドと、toString() メソッドの詳細 - 1

「こんにちは、アミーゴ!」

"やあ!"

「今日は Object クラスについて学びます。
あなたはすでに Object クラスに遭遇しており、Object がすべてのクラスの基本クラスであることを知っています。Object には実質的にデータがありませんが、いくつかのメソッドがあります。」

「なぜメソッドが必要なのでしょうか? 本当に Object クラスのインスタンスを作成する人がいるのですか?」

「こうして見てください。Object クラスのメソッドはすべてのクラスで共通です。言い換えれば、Java の作成者は、すべてのクラスが持つべきであると考えたいくつかのメソッドを特定し、それらを Object クラスに追加しました。」

「そして、ポリモーフィズム (派生クラスでオブジェクト クラスのメソッドをオーバーライドする機能) と組み合わせると、これは非常に強力なツールになります。」

「これらのメソッドが何であるかを見てみましょう。」

方法 説明
public String toString()
オブジェクトの文字列表現を返します。
public native int hashCode()
public boolean equals(Object obj)
オブジェクトを比較するために使用される 1 対のメソッド。
public final native Class getClass()
現在のクラスを説明する特別なオブジェクトを返します。
public final native void notify()
public final native void notifyAll()
public final native void wait(long timeout)
public final void wait(long timeout, intnanos)
public final void wait()
さまざまなスレッドからのオブジェクトへのアクセスを制御するメソッド。スレッド同期用。
protected void finalize()
このメソッドを使用すると、ネイティブの非 Java リソースを解放できます (ファイルやストリームなどを閉じる)。
protected native Object clone()
このメソッドを使用すると、オブジェクトのクローンを作成できます。つまり、オブジェクトの複製が作成されます。

「これらのメソッドは 6 つのグループに分類できます。そのうちのいくつかについてはすでによく知っていますが、残りについては後続のレッスンで説明します。」

「何らかの理由で、ここには役立つものが何も表示されません。」

「アミーゴ! これらのメソッドが重要でないなら、すべてのオブジェクトに追加することはなかったはずです! したがって、これらが何なのか、そしてなぜそれらが必要なのかをもっと詳しく調べることをお勧めします。それらがあなたにとって重要でないと思われる場合は、 、その場合、あなたは何かを理解していないか、何かを正しく理解していません。」

「わかりました。よく聞きます。」

「toString() メソッドから始めましょう。

「このメソッドを使用すると、任意のオブジェクトのテキスト説明を取得できます。Object クラスでの実装は非常に簡単です。」

return getClass().getName() + "@" + Integer.toHexString(hashCode());

「getClass() と hashCode() も Object クラスのメソッドです。
このメソッドを呼び出すと通常、次のような結果が生成されます。」

java.lang.Object@12F456

「それで、そのような説明に何の意味があるのでしょうか?」

「この説明により、メソッドが呼び出されたオブジェクトのクラスがわかります。また、オブジェクトを区別することもできます。オブジェクトが異なれば、@ 記号の後の数字も異なります。」

「しかし、このメソッドの真の価値は別の場所にあります。このメソッドはどのクラスでも上書きして、より詳細な、または適切なオブジェクトの説明を返すことができます。」

「しかし、それだけではありません。各オブジェクトのテキスト表現を取得できるため、Java ではオブジェクトへの文字列の「追加」のサポートを実装できるようになりました。チェックしてください。

コード 本当に何が起こるのか
int age = 18;
System.out.println("Age is " + age);

String s = String.valueOf(18);
String result = "Age is " + s;
System.out.println(result);
Student st = new Student("Vincent");
System.out.println("Student is " + st);

Student st = new Student("Vincent");
String result = "Student is " + st.toString();
System.out.println(result);
Car car = new Porsche();
System.out.println("My car is " + car);

Car car = new Porsche();
String result = "My car is " + car.toString();
System.out.println(result);

「はい、私はこれを定期的に使用しています。特にプログラムを書いているときやバグを探しているときに使用します。これは便利な操作です。」