クラスObject
Objectクラスは、クラス階層のルートです。 すべてのクラスは、スーパー・クラスとしてObjectを持ちます。 配列を含むすべてのオブジェクトは、このクラスのメソッドを実装します。 - 導入されたバージョン:
- 1.0
- 関連項目:
- 
コンストラクタのサマリーコンストラクタ
- 
メソッドのサマリー修飾子と型メソッド説明protected Objectclone()このオブジェクトのコピーを作成して、返します。booleanこのオブジェクトと他のオブジェクトが等しいかどうかを示します。protected voidfinalize()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。最終決定は非推奨であり、将来のリリースで削除される可能性があります。final Class<?> getClass()このObjectの実行時クラスを返します。inthashCode()このオブジェクトに対するハッシュ・コード値を返します。final voidnotify()このオブジェクトのモニターで待機中のスレッドを1つ再開します。final voidこのオブジェクトのモニターで待機中のすべてのスレッドを再開します。toString()オブジェクトの文字列表現を返します。final voidwait()現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。final voidwait(long timeoutMillis) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。final voidwait(long timeoutMillis, int nanos) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
- 
コンストラクタの詳細- 
Objectpublic Object()新しいオブジェクトを構築します。
 
- 
- 
メソッドの詳細- 
getClasspublic final Class<?> getClass()このObjectの実行時クラスを返します。 返されるClassオブジェクトは、表されたクラスのstatic synchronizedメソッドによってロックされるオブジェクトです。実際の結果型は Class<? extends |X|>です。ここで、|X|はgetClassが呼び出される式のstatic型の消去です。 たとえば、このコードの抜粋ではキャストは必要ありません。Number n = 0;
 Class<? extends Number> c = n.getClass();- 戻り値:
- このオブジェクトの実行時クラスを表すClassオブジェクト。
- Java言語仕様を参照してください:
- 
15.8.2 クラス・リテラル
 
- 
hashCodepublic int hashCode()このオブジェクトに対するハッシュ・コード値を返します。 このメソッドは、HashMapによって提供されるハッシュ表などの、ハッシュ表の利点のためにサポートされています。hashCodeの一般的な規則は次のとおりです。- Javaアプリケーションの実行中に同じオブジェクトに対して複数回呼び出された場合は常に、このオブジェクトに対するequalsの比較で使用される情報が変更されていなければ、hashCodeメソッドは常に同じ整数を返す必要があります。 ただし、この整数は同じアプリケーションの実行ごとに同じである必要はありません。
- 2つのオブジェクトがequalsメソッドに従って等しい場合、2つのオブジェクトのそれぞれでhashCodeメソッドを呼び出すと、同じ整数結果が生成される必要があります。
- 2つのオブジェクトがequalsメソッドに従って等しくない場合、2つのオブジェクトのそれぞれでhashCodeメソッドを呼び出すと、個別の整数結果が生成される必要はありません。 ただし、プログラマは、等しくないオブジェクトに対して異なる整数の結果を生成すると、ハッシュ表のパフォーマンスが向上する可能性があることに注意するようにしてください。
 
- Javaアプリケーションの実行中に同じオブジェクトに対して複数回呼び出された場合は常に、このオブジェクトに対する
- 
equalspublic boolean equals(Object obj) このオブジェクトと他のオブジェクトが等しいかどうかを示します。equalsメソッドは、null以外のオブジェクト参照での同値関係を実装します。- 反射性(reflexive): null以外の参照値xについて、x.equals(x)はtrueを返します。
- 対称性(symmetric): null以外の参照値xおよびyについて、y.equals(x)がtrueを返す場合に限り、x.equals(y)はtrueを返します。
- 推移性(transitive): null以外の参照値x、y、およびzについて、x.equals(y)がtrueを返し、y.equals(z)がtrueを返す場合、x.equals(z)はtrueを返します。
- 一貫性(consistent): null以外の参照値xおよびyについて、x.equals(y)の複数の呼出しは、このオブジェクトに対するequalsによる比較で使われた情報が変更されていなければ、一貫してtrueを返すか、一貫してfalseを返します。
- null以外の参照値xについて、x.equals(null)はfalseを返します。
 等価関係は、操作対象の要素を「同等クラス」にパーティション化し、等価クラスのすべてのメンバーは互いに等しくなります。 等価クラスのメンバーは、少なくともなんらかの目的で互いに置換可能です。 - APIのノート:
- 通常、このメソッドがオーバーライドされるたびにhashCodeメソッドをオーバーライドし、hashCodeメソッドの一般契約を維持するには、同等のオブジェクトが同等のハッシュ・コードを持つ必要があることを示します。2つの引数の Objects.equalsメソッドは、NULLの可能性がある2つのオブジェクト参照に対して等価関係を実装します。
- 実装要件:
- Objectクラスの- equalsメソッドは、もっとも比較しやすいオブジェクトの同値関係を実装します。つまり、null以外の参照値- xと- yについて、このメソッドは- xと- yが同じオブジェクトを参照する(- x == yが- true)場合にだけ- trueを返します。 つまり、参照等価関係の下で、各等価クラスには単一の要素のみがあります。
- パラメータ:
- obj- 比較対象の参照オブジェクト。
- 戻り値:
- このオブジェクトがobj引数と同じである場合はtrue、それ以外の場合はfalse。
- 関連項目:
 
- 反射性(reflexive): null以外の参照値
- 
cloneprotected Object clone() throws CloneNotSupportedExceptionこのオブジェクトのコピーを作成して、返します。 「コピー」の正確な意味合いは、オブジェクトのクラスによって異なります。 一般的な意図は、任意のオブジェクトxについて、次の式
 がtrueであり、次の式x.clone() != x 
 がx.clone().getClass() == x.getClass() trueになることですが、これらは絶対的な要件ではありません。 また次の式
 がx.clone().equals(x) trueになりますが、これは絶対的な要件ではありません。慣例上、返されたオブジェクトは、 super.cloneを呼び出すことによって取得するようにしてください。 クラスとそのすべてのスーパー・クラス(Objectを除く)がこの規則に従っている場合は、x.clone().getClass()== x.getClass()が成立します。通常、このメソッドにより返されるオブジェクトは、このオブジェクト(複製されています)から独立している必要があります。 この独立性を実現するには、 super.cloneによって返されたオブジェクトを返す前に、その1つ以上のフィールドを変更することが必要になる場合があります。 これは、通常、複製するオブジェクトの内部「深層構造」を構成する可変オブジェクトのコピー、およびこれらのオブジェクトへの参照をコピーへの参照に置き換えることを意味します。 クラスにプリミティブ・フィールドまたは不変オブジェクトへの参照しか含まれていない場合は、通常、super.cloneによって返されたオブジェクト内のフィールドを変更する必要がありません。- 実装要件:
- クラスObjectのメソッドcloneは、特定のクローニング操作を実行します。 まず、このオブジェクトのクラスがインタフェースCloneableを実装していない場合は、CloneNotSupportedExceptionがスローされます。 すべての配列がインタフェースCloneableを実装していると見なされること、および配列型T[]のcloneメソッドの戻り値の型はT[](ここで、Tは任意の参照またはプリミティブ型)です。 実装していない場合、このメソッドはこのオブジェクトのクラスの新しいインスタンスを生成し、そのフィールドをすべて、このオブジェクトの対応する各フィールドの内容で初期化します。これは代入と同様で、フィールドの内容自身が複製されるのではありません。 つまりこのメソッドは、オブジェクトの「シャロー・コピー」を生成しますが、「ディープ・コピー」は生成しません。クラス Object自体はインタフェースCloneableを実装していないため、クラスがObjectであるオブジェクトに対してcloneメソッドを呼び出すと、実行時に例外がスローされます。
- 戻り値:
- このインスタンスの複製。
- 例外:
- CloneNotSupportedException- オブジェクトのクラスが- Cloneableインタフェースをサポートしていない場合。- cloneメソッドをオーバーライドしたサブクラスも、インスタンスを複製できないことを示すためにこの例外をスローすることがある。
- 関連項目:
 
- 
toStringpublic String toString()オブジェクトの文字列表現を返します。 このメソッドの縮小を満たすと、null以外の結果が返される必要があります。- APIのノート:
- 一般に、toStringメソッドは、このオブジェクトを「テキストで表す」文字列を返します。 この結果は、人間が読める簡潔で有益な情報であるべきです。 すべてのサブクラスで、このメソッドをオーバーライドすることをお勧めします。 文字列の出力は、必ずしも時間の経過とともに、またはJVM呼出し全体で安定しているわけではありません。
- 実装要件:
- クラスObjectのtoStringメソッドは、オブジェクトがインスタンスになっている元のクラスの名前、アットマーク文字「@」、およびオブジェクトのハッシュ・コードの符号なし16進数表現から構成される文字列を返します。 つまり、このメソッドは次の値と等しい文字列を返します。getClass().getName() + '@' + Integer.toHexString(hashCode())Objects.toIdentityStringメソッドは、toStringメソッドもhashCodeメソッドもオブジェクトのクラスによってオーバーライドされなかった場合に返される文字列と等しいオブジェクトの文字列を返します。
- 戻り値:
- このオブジェクトの文字列表現
 
- 
notifypublic final void notify()このオブジェクトのモニターで待機中のスレッドを1つ再開します。 このオブジェクトで複数のスレッドが待機中の場合は、そのうちの1つを再開します。 この選択は任意で、実装によって異なります。 スレッドは、waitメソッドを呼び出すと、オブジェクトのモニターで待機します。再開されたスレッドの処理は、現在のスレッドがこのオブジェクトのロックを解除するまでは進むことができません。 再開されたスレッドは、ほかのスレッドと同じように、このオブジェクトと同期するように積極的に競います。たとえば、このオブジェクトをロックする次のスレッドになろうとする場合でも、再開されたスレッドの扱いはほかのスレッドより優勢でも劣勢でもありません。 このメソッドを呼び出すのは、このオブジェクトのモニターを所有するスレッドだけでなければいけません。 スレッドがオブジェクトのモニターのオーナーになる方法は、次の3通りがあります。 - オブジェクトのsynchronizedインスタンス・メソッドを実行する。
- オブジェクトを同期化するsynchronized文の本体を実行する。
- Class,型のオブジェクトの場合、そのクラスの静的同期メソッドを実行します。
 オブジェクトのモニターを所有できるスレッドは1回に1つだけです。 - 例外:
- IllegalMonitorStateException- 現在のスレッドがこのオブジェクトのモニターを所有していない場合。
- 関連項目:
 
- 
notifyAllpublic final void notifyAll()このオブジェクトのモニターで待機中のすべてのスレッドを再開します。 スレッドは、waitメソッドを呼び出すと、オブジェクトのモニターで待機します。再開されたスレッドの処理は、現在のスレッドがこのオブジェクトのロックを解除するまでは進むことができません。 再開されたスレッドは、ほかのスレッドと同じように、このオブジェクトと同期するように積極的に競います。たとえば、このオブジェクトをロックする次のスレッドになろうとする場合でも、再開されたスレッドの扱いはほかのスレッドより優勢でも劣勢でもありません。 このメソッドを呼び出すのは、このオブジェクトのモニターを所有するスレッドだけでなければいけません。 スレッドがオブジェクトのモニターのオーナーになる方法については、 notifyメソッドを参照してください。- 例外:
- IllegalMonitorStateException- 現在のスレッドがこのオブジェクトのモニターを所有していない場合。
- 関連項目:
 
- 
waitpublic final void wait() throws InterruptedException現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。すべての点で、このメソッドは wait(0L, 0)が呼び出されたかのように動作します。 詳細については、wait(long, int)メソッドの仕様を参照してください。- 例外:
- IllegalMonitorStateException- 現在のスレッドがオブジェクトのモニターを所有していない場合
- InterruptedException- 現在のスレッドが待機していた前または中に、現在のスレッドに割り込みが発生した場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
- 関連項目:
 
- 
waitpublic final void wait(long timeoutMillis) throws InterruptedException 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。すべての点で、このメソッドは wait(timeoutMillis, 0)が呼び出されたかのように動作します。 詳細については、wait(long, int)メソッドの仕様を参照してください。- パラメータ:
- timeoutMillis- 待機する最大時間(ミリ秒単位)
- 例外:
- IllegalArgumentException-- timeoutMillisが負の場合
- IllegalMonitorStateException- 現在のスレッドがオブジェクトのモニターを所有していない場合
- InterruptedException- 現在のスレッドが待機していた前または中に、現在のスレッドに割り込みが発生した場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
- 関連項目:
 
- 
waitpublic final void wait(long timeoutMillis, int nanos) throws InterruptedException 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。現在のスレッドは、このオブジェクトのモニター・ロックを所有している必要があります。 スレッドがモニター・ロックの所有者になる方法については、 notifyメソッドを参照してください。このメソッドは、現在のスレッド(ここではTと呼ばれます)をこのオブジェクトの待機セットに配置し、このオブジェクトの同期要求をすべて放棄します。 このオブジェクトのロックだけが解放されることに注意してください。スレッドが待機している間、現在のスレッドが同期化されている他のオブジェクトはロックされたままです。 スレッドTはスレッドのスケジューリングの目的で無効になり、次のいずれかが発生するまで休止状態になります: - ほかのスレッドがこのオブジェクトに対してnotifyメソッドを呼び出し、再開されるスレッドとしてスレッドTが選ばれた。
- ほかのスレッドがこのオブジェクトに対してnotifyAllメソッドを呼び出した。
- ほかのスレッドがスレッドTに割り込みをかける。
- 指定された実時間が経過した。 リアルタイムの量(ナノ秒単位)は、式1000000 * timeoutMillis + nanosによって与えられます。timeoutMillisとnanosが両方ともゼロである場合、実時間は考慮されず、スレッドは他の原因の1つによって起こされるまで待つ。
- スレッドTが偽って起こされます。 (後述の説明を参照してください)
 その後スレッドTはこのオブジェクトの待機セットから削除され、スレッドのスケジューリングがふたたび可能になります。 通常の方法で他のスレッドと競合し、オブジェクト上で同期をとることができます。オブジェクトの制御を回復すると、そのオブジェクトに対するすべての同期要求が現状維持に戻されます - つまり、 waitメソッドが呼び出された時点の状況に戻ります。 次にスレッドTはwaitメソッドの呼び出しから復帰します。 こうして、waitメソッドから復帰した時点で、オブジェクトおよびスレッドTの同期ステータスは、waitメソッドが呼び出されたときとまったく同じになります。スレッドは、通知、中断またはタイムアウトすることなく、いわゆる「偽の起床」で起動できます。 スプリアス・ウェイクアップは、実際にはまれにしか発生しませんが、アプリケーションでは、スレッドが再開されることで発生する可能性がある条件をテストし、条件が満たされない場合は待機を続けて、スプリアス・ウェイクアップから保護しなければいけません。 次の例を参照してください。 このトピックの詳細は、Brian Goetzの14.2、"条件待ち行列、"、およびJoshua Bloch 「Effective Java、第3版」 (Addison-Wesley, 2018)のJava Concurrency in Practice (Addison-Wesley, 2006)またはItem 81を参照してください。 現在のスレッドの待機中または待機前に任意のスレッドから割り込みがかかった場合、 InterruptedExceptionがスローされます。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。 この例外は、このオブジェクトのロック・ステータスが前述のように復元されるまではスローされません。- APIのノート:
- 待機するための推奨される方法は、以下の例に示すように、waitへの呼び出しの周りのwhileループで待っている状態をチェックすることです。 とりわけ、このアプローチは、偽のウェイ・ク アップによって引き起こされる可能性のある問題を回避します。synchronized (obj) { while ( <condition does not hold and timeout not exceeded> ) { long timeoutMillis = ... ; // recompute timeout values int nanos = ... ; obj.wait(timeoutMillis, nanos); } ... // Perform action appropriate to condition or timeout }
- パラメータ:
- timeoutMillis- 待機する最大時間(ミリ秒単位)
- nanos- 追加時間(ナノ秒) (0から999999 (包含)の範囲)
- 例外:
- IllegalArgumentException-- timeoutMillisが負の場合、または- nanosの値が範囲外の場合
- IllegalMonitorStateException- 現在のスレッドがオブジェクトのモニターを所有していない場合
- InterruptedException- 現在のスレッドが待機していた前または中に、現在のスレッドに割り込みが発生した場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
- 関連項目:
 
- ほかのスレッドがこのオブジェクトに対して
- 
finalize@Deprecated(since="9", forRemoval=true) protected void finalize() throws Throwable削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。最終決定は非推奨であり、将来のリリースで削除される可能性があります。 ファイナライズを使用すると、セキュリティ、パフォーマンスおよび信頼性の問題が発生する可能性があります。 詳細および代替手段については、JEP 421を参照してください。クリーンアップを実行するために finalizeをオーバーライドするサブクラスは、代替のクリーンアップ・メカニズムを使用し、finalizeメソッドを削除する必要があります。 オブジェクトにアクセスできなくなった場合にリソースを解放するより安全な方法として、CleanerおよびPhantomReferenceを使用します。 または、closeメソッドを追加してリソースを明示的に解放し、AutoCloseableを実装してtry-with-resources文の使用を有効にします。このメソッドは、ファイナライザがほとんどの既存コードから削除されるまで有効です。 このオブジェクトへの参照はもうないとガベージ・コレクションによって判断されたときに、ガベージ・コレクタによって呼び出されます。 サブクラスはfinalizeメソッドをオーバーライドして、システム・リソースを破棄したり、その他のクリーンアップを行ったりすることができます。ファイナライズが無効または削除されているJava仮想マシンで実行されているWhenは、ガベージ・コレクタが finalize()をコールすることはありません。 ファイナライズが有効なJava仮想マシンでは、ガベージ・コレクタが無期限のdelay.の後にのみfinalizeをコールする場合がありますfinalizeの一般規約では、ファイナライズの準備ができている他のオブジェクトまたはクラスのファイナライズによって実行されたアクションを除き、まだ終了していないスレッドがこのオブジェクトにアクセスできないとJava仮想マシンが判断した場合に呼び出されます。finalizeメソッドは、このオブジェクトを別のスレッドでふたたび利用可能にすることも含めて、任意のアクションを行うことができます。しかし、finalizeの通常の用途は、オブジェクトを再生不可能な形で破棄する前のクリーンアップを実行することです。 たとえば、入出力の接続を表すオブジェクトのfinalizeメソッドは、オブジェクトが永久的に破棄される前に、接続を切断するための明示的な入出力処理を行います。Objectクラスのfinalizeメソッドは、特別な処理を行いません。通常は、何もしないで復帰します。Objectのサブクラスは、この定義をオーバーライドすることができます。Javaプログラミング言語は、任意のオブジェクトについてどのスレッドが finalizeメソッドを呼び出すかを保証しません。 しかし、finalizeを呼び出すスレッドが、ユーザーに可視な同期ロックをfinalize呼出しの時点では保持していないことについては保証されます。 キャッチされない例外をfinalizeメソッドがスローした場合、例外は無視され、オブジェクトのファイナライズは終了します。あるオブジェクトについて finalizeメソッドが呼び出されたあとに次の処理が発生するのは、まだ生存している任意のスレッドがこのオブジェクトにアクセスできる方法はないと、Java Virtual Machineがふたたび判断したときです。これには、ファイナライズの準備ができているほかのオブジェクトまたはクラスによって発生した処理も含まれ、その時点でこのオブジェクトは破棄されます。任意のオブジェクトについてJava Virtual Machineが finalizeメソッドを複数回呼び出すことはありません。finalizeメソッドによって例外がスローされると、finalizeメソッドの処理は停止されます。そうでない場合は無視されます。- APIのノート:
- ヒープ以外のリソースを埋め込むクラスには、それらのリソースをクリーンアップするための多くのオプションがあります。 クラスは、各インスタンスの存続期間が、そのインスタンスが埋め込むリソースの存続期間よりも長いことを確認する必要があります。 Reference.reachabilityFence(java.lang.Object)を使用すると、オブジェクトに埋め込まれたリソースが使用されている間に、オブジェクトが到達可能であることを保証できます。サブクラスは、インスタンスが収集される前にクリーンアップする必要がある非ヒープ・リソースをサブクラスに埋め込まないかぎり、 finalizeメソッドのオーバーライドを回避する必要があります。 ファイナライザの起動は、コンストラクタとは異なり、自動的に連鎖されることはありません。 サブクラスがfinalizeをオーバーライドする場合、スーパークラス・ファイナライザを明示的に呼び出す必要があります。 ファイナライズ・チェーンを途中で終了する例外から保護するには、サブクラスでtry-finallyブロックを使用して、super.finalize()が常に呼び出されるようにする必要があります。 たとえば、@Override protected void finalize() throws Throwable { try { ... // cleanup subclass state } finally { super.finalize(); } }
- 例外:
- Throwable- このメソッドで生じた- Exception
- Java言語仕様を参照してください:
- 
12.6 クラス・インスタンスのファイナライズ
- 関連項目:
 
 
-