JavaTM 2 Platform
Std. Ed. v1.3

java.lang
クラス Object

java.lang.Object

public class Object

Object クラスは、クラス階層のルートです。すべてのクラスは、スーパークラスとして Object を持ちます。配列を含むすべてのオブジェクトは、このクラスのメソッドを実装します。

導入されたバージョン:
JDK1.0
関連項目:
Class

コンストラクタの概要
Object()
           
 
メソッドの概要
protected  Object clone()
          このオブジェクトのコピーを作成して返します。
 boolean equals(Object obj)
          このオブジェクトと他のオブジェクトが等しいかどうかを示します。
protected  void finalize()
          このオブジェクトへの参照はもうないとガーベージコレクションによって判断されたときに、ガーベージコレクタによって呼び出されます。
 Class getClass()
          オブジェクトの実行時クラスを返します。
 int hashCode()
          オブジェクトのハッシュコード値を返します。
 void notify()
          このオブジェクトのモニターで待機中のスレッドを 1 つ再開します。
 void notifyAll()
          このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
 String toString()
          オブジェクトの文字列表現を返します。
 void wait()
          他のスレッドがこのオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すまで、現在のスレッドを待機させます。
 void wait(long timeout)
          別のスレッドがこのオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すか、指定された時間が経過するまで、現在のスレッドを待機させます。
 void wait(long timeout, int nanos)
          他のスレッドがこのオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すか、他のスレッドが現在のスレッドに割り込みをかけたり、指定された量の実時間が経過するまで、現在のスレッドを待機させます。
 

コンストラクタの詳細

Object

public Object()
メソッドの詳細

getClass

public final Class getClass()
オブジェクトの実行時クラスを返します。この Class オブジェクトは、表されたクラスの static synchronized メソッドによってロックされるオブジェクトです。
戻り値:
オブジェクトの実行時クラスを表す Class 型のオブジェクト

hashCode

public int hashCode()
オブジェクトのハッシュコード値を返します。このメソッドは、java.util.Hashtable によって提供されるようなハッシュテーブルで使用するために用意されています。

hashCode メソッドの一般的な規則を次に示します。

できる限り、Object クラスで定義される hashCode メソッドは、異なるオブジェクトについては異なる整数値を返します。通常、これはオブジェクトの内部アドレスを整数値に変換する形で実装されますが、そのような実装テクニックは JavaTM プログラミング言語では不要です。

戻り値:
このオブジェクトのハッシュコード値
関連項目:
equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
このオブジェクトと他のオブジェクトが等しいかどうかを示します。

equals メソッドは同値関係を実装します。

Object クラスの equals メソッドは、もっとも比較しやすいオブジェクトの同値関係を実装します。つまり、すべての参照値 xy について、このメソッドは xy が同じオブジェクトを参照する (x==ytrue) 場合にだけ true を返します。

パラメータ:
obj - 比較対象の参照オブジェクト
戻り値:
obj 引数に指定されたオブジェクトとこのオブジェクトが等しい場合は true、そうでない場合は false
関連項目:
Boolean.hashCode(), Hashtable

clone

protected Object clone()
                throws CloneNotSupportedException
このオブジェクトのコピーを作成して返します。「コピー」の正確な意味合いは、オブジェクトのクラスによって異なります。一般的には、任意のオブジェクト x について、次の式
 x.clone() != x
が true であり、次の式
 x.clone().getClass() == x.getClass()
true であることですが、これらも絶対的な要件ではありません。また次の式
 x.clone().equals(x)
も通常は true になりますが、これも絶対的な要件ではありません。オブジェクトのコピーでは一般に、コピー対象オブジェクトのクラスのインスタンスを新しく生成することになります。このとき、内部データ構造のコピーが必要な場合もあります。コンストラクタは呼び出されません。

Object クラスの clone メソッドは、特定の複製処理を実行します。まず、このオブジェクトのクラスが Cloneable インタフェースを実装していない場合は、CloneNotSupportedException がスローされます。配列はすべて、インタフェース Cloneable を実装しているものと見なされることに注意してください。実装していない場合、このメソッドはこのオブジェクトのクラスの新しいインスタンスを生成し、そのフィールドをすべて、このオブジェクトの対応する各フィールドの内容で初期化します。これは代入と同様で、フィールドの内容自身が複製されるのではありません。つまりこのメソッドは、オブジェクトのシャローコピーを生成しますが、ディープコピーは生成しません。

Object クラス自身は、Cloneable インタフェースを実装しません。このため、クラスが Object であるオブジェクトで clone メソッドを呼び出すと、結果として実行時に例外がスローされます。Object クラスは、Cloneable インタフェースを実装するサブクラスによって使われる簡易汎用ユーティリティとして clone メソッドを実装しています。サブクラスは、この clone をオーバーライドできますが、その場合、オーバーライド側の定義は、次に示す呼び出しでこのユーティリティ定義を参照できます。

 super.clone()
戻り値:
このインスタンスの複製
例外:
CloneNotSupportedException - オブジェクトのクラスが Cloneable インタフェースをサポートしていない場合。clone メソッドをオーバーライドしたサブクラスも、インスタンスを複製できないことを示すためにこの例外をスローすることがある
OutOfMemoryError - 十分なメモリがない場合
関連項目:
Cloneable

toString

public String toString()
オブジェクトの文字列表現を返します。通常、toString メソッドはこのオブジェクトを「テキストで表現する」文字列を返します。この結果は、人間が読める簡潔で有益な情報であるべきです。すべてのサブクラスで、このメソッドをオーバーライドすることをお勧めします。

Object クラスの toString メソッドは、オブジェクトの派生元のクラス名、アットマーク (@)、およびオブジェクトのハッシュコードの符号なし 16 進表現から構成される文字列を返します。つまり、このメソッドは次の値と等しい文字列を返します。

 getClass().getName() + '@' + Integer.toHexString(hashCode())
 
戻り値:
このオブジェクトの文字列表現

notify

public final void notify()
このオブジェクトのモニターで待機中のスレッドを 1 つ再開します。このオブジェクトで複数のスレッドが待機中の場合は、そのうちの 1 つを再開します。この選択は任意で、実装によって異なります。スレッドは、wait メソッドを 1 つ呼び出して、オブジェクトのモニターで待機します。

再開されたスレッドの処理は、現在のスレッドがこのオブジェクトのロックを解除するまでは進むことができません。再開されたスレッドは、他のスレッドと同じように、このオブジェクトと同期するように積極的に競います。たとえば、このオブジェクトをロックする次のスレッドになろうとする場合でも、再開されたスレッドの扱いは他のスレッドより優勢でも劣勢でもありません。

このメソッドを呼び出すのは、このオブジェクトのモニターを所有するスレッドでなければなりません。スレッドがオブジェクトのモニターのオーナになる方法は、次の 3 通りがあります。

オブジェクトのモニターを所有できるスレッドは 1 回に 1 つだけです。

例外:
IllegalMonitorStateException - 現在のスレッドがこのオブジェクトのモニターを所有していない場合
関連項目:
notifyAll(), wait()

notifyAll

public final void notifyAll()
このオブジェクトのモニターで待機中のすべてのスレッドを再開します。スレッドは、wait メソッドを呼び出すと、オブジェクトのモニターで待機します。

再開されたスレッドの処理は、現在のスレッドがこのオブジェクトのロックを解除するまでは進むことができません。再開されたスレッドは、他のスレッドと同じように、このオブジェクトと同期するように積極的に競います。たとえば、このオブジェクトをロックする次のスレッドになろうとする場合でも、再開されたスレッドの扱いは他のスレッドより優勢でも劣勢でもありません。

このメソッドを呼び出すのは、このオブジェクトのモニターを所有するスレッドだけでなければなりません。スレッドがオブジェクトのモニターのオーナになる方法については、notify メソッドを参照してください。

例外:
IllegalMonitorStateException - 現在のスレッドがこのオブジェクトのモニターを所有していない場合
関連項目:
notify(), wait()

wait

public final void wait(long timeout)
                throws InterruptedException
別のスレッドがこのオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すか、指定された時間が経過するまで、現在のスレッドを待機させます。

現在のスレッドは、このオブジェクトのモニターのオーナでなければなりません。

このメソッドは、現在のスレッド (ここでは T とする) をこのオブジェクトの待機セットに入れてから、このオブジェクトについての同期要求をすべて廃棄します。スレッド T は、スレッドのスケジューリングについては無効とされ、以下の 4 つのどれかが発生するまで待機します。

その後スレッド T はこのオブジェクトの待機セットから削除され、スレッドのスケジューリングが再び可能になります。以後、このスレッドは通常どおりに、オブジェクトと同期をとる権利を他のスレッドと競います。オブジェクトの制御を獲得すれば、オブジェクトに対するこのスレッドの同期要求は、以前の状態、つまり、wait メソッドが呼び出されたときの状態に復元されます。次にスレッド Twait メソッドの呼び出しから復帰します。こうして、wait メソッドから復帰した時点で、オブジェクトおよびスレッド T の同期ステータスは、wait メソッドが呼び出されたときとまったく同じになります。

現在のスレッドが待機中に他のスレッドによって割り込まれた場合は、InterruptedException がスローされます。この例外は、このオブジェクトのロックステータスが前述のように復元されるまではスローされません。

現在のスレッドをこのオブジェクトの待機セットに入れるときに、wait メソッドはこのオブジェクトのロックだけを解除します。現在のスレッドが同期をとる可能性のあるその他のオブジェクトは、このスレッドが待機している間もロックされたままです。

このメソッドを呼び出すのは、このオブジェクトのモニターを所有するスレッドだけでなければなりません。スレッドがオブジェクトのモニターのオーナになる方法については、notify メソッドを参照してください。

パラメータ:
timeout - ミリ秒単位の待機時間
例外:
IllegalArgumentException - timeout の値が負である場合
IllegalMonitorStateException - 現在のスレッドがオブジェクトのモニターを所有していない場合
InterruptedException - 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの割り込みステータスはクリアされる
関連項目:
notify(), notifyAll()

wait

public final void wait(long timeout,
                       int nanos)
                throws InterruptedException
他のスレッドがこのオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すか、他のスレッドが現在のスレッドに割り込みをかけたり、指定された量の実時間が経過するまで、現在のスレッドを待機させます。

このメソッドは、引数が 1 つの wait メソッドに似ていますが、タイムアウトまでの待ち時間の量をより細かく制御することができます。ナノ秒単位の実時間は、次の式で指定します。

 1000000*millis+nanos

その他の面では、このメソッドの動作は引数が 1 つの wait(long) メソッドと同じです。特に、wait(0, 0)wait(0) と同じ意味になります。

現在のスレッドは、オブジェクトのモニターのオーナでなければなりません。スレッドはこのモニターの所有権を解放し、次のどれかの状態が発生するまで待機します。

スレッドはモニターの所有権を再度獲得するまで待機し、そのあと実行を再開します。

このメソッドを呼び出すのは、このオブジェクトのモニターを所有するスレッドだけでなければなりません。スレッドがオブジェクトのモニターのオーナになる方法については、notify メソッドを参照してください。

パラメータ:
timeout - ミリ秒単位の待機時間
nanos - 追加の待ち時間 (ナノ秒単位で 0 〜 999999 の範囲)
例外:
IllegalArgumentException - 待ち時間の値が負の場合、または nanos の値が 0 〜 999999 の範囲外の場合
IllegalMonitorStateException - 現在のスレッドがこのオブジェクトのモニターを所有していない場合
InterruptedException - 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの割り込みステータスはクリアされる

wait

public final void wait()
                throws InterruptedException
他のスレッドがこのオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すまで、現在のスレッドを待機させます。つまり、このメソッドの動作は wait(0) を呼び出した場合と同じです。

現在のスレッドはこのオブジェクトのモニターのオーナでなければなりません。スレッドはこのモニターの所有権を解放し、別のスレッドが notify メソッドまたは notifyAll メソッドを呼び出してこのオブジェクトのモニター上で待機するスレッドに通知を出すまで待機します。そのあと、スレッドはモニターの所有権を再度取得するまで待機してから実行を再開します。

このメソッドを呼び出すのは、このオブジェクトのモニターを所有するスレッドだけでなければなりません。スレッドがオブジェクトのモニターのオーナになる方法については、notify メソッドを参照してください。

例外:
IllegalMonitorStateException - 現在のスレッドがオブジェクトのモニターを所有していない場合
InterruptedException - 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの割り込みステータスはクリアされる
関連項目:
notify(), notifyAll()

finalize

protected void finalize()
                 throws Throwable
このオブジェクトへの参照はもうないとガーベージコレクションによって判断されたときに、ガーベージコレクタによって呼び出されます。サブクラスは finalize メソッドをオーバーライドして、システムリソースを破棄したり、その他のクリーンアップを行うことができます。

finalize の一般的な規約では、finalize の呼び出しは、まだ生存している任意のスレッドがこのオブジェクトにアクセスする方法はないと、JavaTM Virtual Machine が判断した場合に行われます。ただし、ファイナライズの準備が済んだ他のオブジェクトまたはクラスをファイナライズするための処理の結果そうなった場合を除きます。finalize メソッドは、このオブジェクトを別のスレッドで再び利用可能にすることも含めて、任意のアクションを行うことができます。しかし、finalize の通常の用途は、オブジェクトを再生不可能な形で破棄する前のクリーンアップを実行することです。たとえば、入出力の接続を表すオブジェクトの finalize メソッドは、オブジェクトが永久的に破棄される前に、接続を切断するための明示的な入出力処理を行います。

Object クラスの finalize メソッドは、特別な処理を行いません。通常は、何もしないで復帰します。Object のサブクラスは、この定義をオーバーライドすることができます。

Java プログラミング言語は、任意のオブジェクトについてどのスレッドが finalize メソッドを呼び出すかを保証しません。しかし、finalize を呼び出すスレッドが、ユーザに可視な同期ロックを finalize 呼び出しの時点では保持していないことについては保証されます。キャッチされない例外を finalize メソッドがスローした場合、例外は無視され、オブジェクトのファイナライズは終了します。

あるオブジェクトについて finalize メソッドが呼び出されたあとに次の処理が発生するのは、まだ生存している任意のスレッドがこのオブジェクトにアクセスできる方法はないと、Java Virtual Machine が再び判断したときです。これには、ファイナライズの準備ができている他のオブジェクトまたはクラスによって発生した処理も含まれ、その時点でこのオブジェクトは破棄されます。

任意のオブジェクトについて Java Virtual Machine が finalize メソッドを複数回呼び出すことはありません。

finalize メソッドによって例外がスローされると、finalize メソッドの処理は停止されます。そうでない場合は無視されます。

例外:
Throwable - このメソッドで生じた Exception

JavaTM 2 Platform
Std. Ed. v1.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.