Javaのオブジェクトクラス
物体 クラスが存在します java.lang パッケージ。 Java のすべてのクラスは、直接的または間接的に、 物体 クラス。クラスが他のクラスを拡張しない場合、それは次のクラスの直接の子クラスになります。 物体 別のクラスを拡張する場合、そのクラスは間接的に派生します。したがって、オブジェクト クラスのメソッドはすべての Java クラスで使用できます。したがって、オブジェクト クラスは、Java プログラムの継承階層のルートとして機能します。
オブジェクトクラスメソッドの使用
Object クラスは、次のような複数のメソッドを提供します。
- toString() メソッド
- hashCode() メソッド
- equals(Object obj) メソッド
- Finalize() メソッド
- getClass() メソッド
- clone() メソッド
- wait()、notify()、notifyAll() メソッド
1. toString() メソッド
toString() はオブジェクトの String 表現を提供し、オブジェクトを String に変換するために使用されます。クラス Object のデフォルトの toString() メソッドは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字 `@'、およびオブジェクトのハッシュ コードの符号なし 16 進表現で構成される文字列を返します。つまり、次のように定義されます。
// Default behavior of toString() is to print class name, then // @, then unsigned hexadecimal representation of the hash code // of the object public String toString() { return getClass().getName() + '@' + Integer.toHexString(hashCode()); } をオーバーライドすることを常にお勧めします。 toString() メソッドを使用して、オブジェクトの独自の文字列表現を取得します。 toString() メソッドのオーバーライドの詳細については、以下を参照してください。 Java での toString() のオーバーライド
注記: オブジェクト参照を出力しようとすると、内部で toString() メソッドが呼び出されます。
Student s = new Student(); // Below two statements are equivalent System.out.println(s); System.out.println(s.toString());
2. hashCode() メソッド
JVM はオブジェクトごとに、ハッシュコードである一意の番号を生成します。個別のオブジェクトに対して個別の整数を返します。このメソッドに関するよくある誤解は、 hashCode() メソッドがオブジェクトのアドレスを返すというものですが、これは正しくありません。アルゴリズムを使用して、オブジェクトの内部アドレスを整数に変換します。 hashCode()メソッドは ネイティブ Java ではオブジェクトのアドレスを見つけることが不可能であるため、C/C++ などのネイティブ言語を使用してオブジェクトのアドレスを見つけます。
hashCode() メソッドの使用
コレクション内のオブジェクトの検索に使用されるハッシュ値を返します。 JVM (Java Virtual Machine) は、オブジェクトを HashSet、HashMap、Hashtable などのハッシュ関連のデータ構造に保存するときにハッシュコード メソッドを使用します。ハッシュ コードに基づいてオブジェクトを保存する主な利点は、検索が容易になることです。
注記: の上書き ハッシュコード() このメソッドは、オブジェクトごとに一意の番号を生成するように実行する必要があります。たとえば、Student クラスの場合、ロール番号を返すことができます。これは一意であるため、 hashCode() メソッドからの学生のデータを取得します。
ジャワ
// Java program to demonstrate working of> // hashCode() and toString()> public> class> Student {> > static> int> last_roll => 100> ;> > int> roll_no;> > // Constructor> > Student()> > {> > roll_no = last_roll;> > last_roll++;> > }> > // Overriding hashCode()> > @Override> public> int> hashCode() {> return> roll_no; }> > // Driver code> > public> static> void> main(String args[])> > {> > Student s => new> Student();> > // Below two statements are equivalent> > System.out.println(s);> > System.out.println(s.toString());> > }> }> |
出力:
Student@64 Student@64
4*16 であることに注意してください。 0 + 6*16 1 = 100
3.equals(Object obj)メソッド
指定されたオブジェクトとこのオブジェクト (メソッドが呼び出されるオブジェクト) を比較します。これは、オブジェクトが等しいかどうかを比較する一般的な方法を提供します。オーバーライドすることをお勧めします 等しい(オブジェクトオブジェクト) オブジェクトに対する独自の等価条件を取得するメソッド。 equals(Object obj) メソッドのオーバーライドの詳細については、以下を参照してください。 Javaでのequalsメソッドのオーバーライド
注記: 通常はオーバーライドする必要があります。 ハッシュコード() 等しいオブジェクトには等しいハッシュ コードが必要であるという hashCode メソッドの一般規約を維持するために、このメソッドがオーバーライドされるたびにメソッドが使用されます。
4. getClass() メソッド
このオブジェクトのクラス オブジェクトを返し、オブジェクトの実際のランタイム クラスを取得するために使用されます。このクラスのメタデータを取得するために使用することもできます。返される Class オブジェクトは、表現されたクラスの静的同期メソッドによってロックされているオブジェクトです。これは最終的なものであるため、上書きしません。
ジャワ
// Java program to demonstrate working of getClass()> public> class> Test {> > public> static> void> main(String[] args)> > {> > Object obj => new> String(> 'GeeksForGeeks'> );> > Class c = obj.getClass();> > System.out.println(> 'Class of Object obj is : '> > + c.getName());> > }> }> |
出力:
Class of Object obj is : java.lang.String
注記: .class ファイルをロードした後、JVM は次のタイプのオブジェクトを作成します。 java.lang.クラス ヒープ領域内。このクラス オブジェクトを使用して、クラス レベルの情報を取得できます。広く使用されています 反射
5.finalize()メソッド
このメソッドは、オブジェクトがガベージ コレクションされる直前に呼び出されます。それはと呼ばれています ガベージコレクター オブジェクトへの参照がもう存在しないとガベージ コレクターが判断したとき。システムリソースを破棄し、クリーンアップアクティビティを実行し、メモリリークを最小限に抑えるには、finalize() メソッドをオーバーライドする必要があります。たとえば、サーブレット オブジェクトの Web コンテナを破棄する前に、常に Finalize メソッドを呼び出して、セッションのクリーンアップ アクティビティを実行します。
注記: Finalize メソッドは単に呼び出されます 一度 オブジェクトが複数回ガベージ コレクションの対象である場合でも、そのオブジェクトに対して。
ジャワ
// Java program to demonstrate working of finalize()> public> class> Test {> > public> static> void> main(String[] args)> > {> > Test t => new> Test();> > System.out.println(t.hashCode());> > t => null> ;> > // calling garbage collector> > System.gc();> > System.out.println(> 'end'> );> > }> > @Override> protected> void> finalize()> > {> > System.out.println(> 'finalize method called'> );> > }> }> |
出力:
1510467688 finalize method called end
6. clone() メソッド
このオブジェクトとまったく同じ新しいオブジェクトを返します。 clone() メソッドについては、を参照してください。 クローン() 。
残りの3つの方法 待って() 、 通知() すべて通知() は同時実行に関連しています。参照する Java のスレッド間通信 詳細については。
Java でのすべての Object クラスのメソッドの使用例
ジャワ
import> java.io.*;> public> class> Book> implements> Cloneable {> > private> String title;> > private> String author;> > private> int> year;> > public> Book(String title, String author,> int> year)> > {> > this> .title = title;> > this> .author = author;> > this> .year = year;> > }> > // Override the toString method> > @Override> public> String toString()> > {> > return> title +> ' by '> + author +> ' ('> + year +> ')'> ;> > }> > // Override the equals method> > @Override> public> boolean> equals(Object obj)> > {> > if> (obj ==> null> || !(obj> instanceof> Book)) {> > return> false> ;> > }> > Book other = (Book)obj;> > return> this> .title.equals(other.getTitle())> > &&> this> .author.equals(other.getAuthor())> > &&> this> .year == other.getYear();> > }> > // Override the hashCode method> > @Override> public> int> hashCode()> > {> > int> result => 17> ;> > result => 31> * result + title.hashCode();> > result => 31> * result + author.hashCode();> > result => 31> * result + year;> > return> result;> > }> > // Override the clone method> > @Override> public> Book clone()> > {> > try> {> > return> (Book)> super> .clone();> > }> > catch> (CloneNotSupportedException e) {> > throw> new> AssertionError();> > }> > }> > // Override the finalize method> > @Override> protected> void> finalize()> throws> Throwable> > {> > System.out.println(> 'Finalizing '> +> this> );> > }> > public> String getTitle() {> return> title; }> > public> String getAuthor() {> return> author; }> > public> int> getYear() {> return> year; }> > public> static> void> main(String[] args)> > {> > // Create a Book object and print its details> > Book book1 => new> Book(> > 'The Hitchhiker's Guide to the Galaxy'> ,> > 'Douglas Adams'> ,> 1979> );> > System.out.println(book1);> > // Create a clone of the Book object and print its> > // details> > Book book2 = book1.clone();> > System.out.println(book2);> > // Check if the two objects are equal> > System.out.println(> 'book1 equals book2: '> > + book1.equals(book2));> > // Get the hash code of the two objects> > System.out.println(> 'book1 hash code: '> > + book1.hashCode());> > System.out.println(> 'book2 hash code: '> > + book2.hashCode());> > // Set book1 to null to trigger garbage collection> > // and finalize method> > book1 => null> ;> > System.gc();> > }> }> |
出力
The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) book1 equals book2: true book1 hash code: 1840214527 book2 hash code: 1840214527