|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object
public class Object
類別 Object
是類別層次結構的根類別。每個類別都使用 Object
作為父級類別。所有物件(包括陣列)都實作這個類別的方法。
Class
建構子摘要 | |
---|---|
Object()
|
方法摘要 | |
---|---|
protected Object |
clone()
創建並返回此物件的一個副本。 |
boolean |
equals(Object obj)
指示其他某個物件是否與此物件「相等」。 |
protected void |
finalize()
當垃圾回收器確定不存在對該物件的更多參考時,由物件的垃圾回收器調用此方法。 |
Class<?> |
getClass()
返回此 Object 的運行時類別。 |
int |
hashCode()
返回該物件的雜湊碼值。 |
void |
notify()
喚醒在此物件監視器上等待的單個執行緒。 |
void |
notifyAll()
喚醒在此物件監視器上等待的所有執行緒。 |
String |
toString()
返回該物件的字元串表示。 |
void |
wait()
在其他執行緒調用此物件的 notify() 方法或 notifyAll() 方法前,導致當前執行緒等待。 |
void |
wait(long timeout)
在其他執行緒調用此物件的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量前,導致當前執行緒等待。 |
void |
wait(long timeout,
int nanos)
在其他執行緒調用此物件的 notify() 方法或 notifyAll() 方法,或者其他某個執行緒中斷當前執行緒,或者已超過某個實際時間量前,導致當前執行緒等待。 |
建構子詳細資訊 |
---|
public Object()
方法詳細資訊 |
---|
public final Class<?> getClass()
Object
的運行時類別。返回的 Class
物件是由所表示類別的 static synchronized
方法鎖定的物件。
實際結果型別是 Class<? extends |X|>
,其中 |X|
表示清除表達式中的靜態型別,該表達式調用 getClass
。 例如,以下程式碼片段中不需要強制轉換:
Number n = 0;
Class<? extends Number> c = n.getClass();
Class
物件。public int hashCode()
java.util.Hashtable
提供的雜湊表)的性能。
hashCode
的常規協定是:
hashCode
方法都必須產生相同的整數結果。
equals(java.lang.Object)
方法,兩個物件不相等,那麼對這兩個物件中的任一物件上調用 hashCode 方法不 要求一定產生不同的整數結果。但是,開發人員應該意識到,為不相等的物件產生不同整數結果可以提高雜湊表的性能。
實際上,由 Object 類別定義的 hashCode 方法確實會針對不同的物件返回不同的整數。(這一般是通過將該物件的內部位址轉換成一個整數來實作的,但是 JavaTM 程式語言不需要這種實作技巧。)
equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
equals
方法在非空(null)物件參考上實作相等關係:
x
,x.equals(x)
都應返回 true
。
x
和 y
,當且僅當 y.equals(x)
返回 true
時,x.equals(y)
才應返回 true
。
x
、y
和 z
,如果 x.equals(y)
返回 true
,並且 y.equals(z)
返回 true
,那麼 x.equals(z)
應返回 true
。
x
和 y
,多次調用 x.equals(y) 始終返回 true
或始終返回 false
,前提是物件上 equals
比較中所用的資訊沒有被修改。
x
,x.equals(null)
都應返回 false
。
Object
類別的 equals 方法實作物件上差別可能性最大的相等關係;即,對於任何非空(null)參考值 x
和 y
,當且僅當 x
和 y
參考同一個物件時,此方法才返回 true
(x == y
具有值 true
)。
注意:當此方法被覆寫時,通常有必要覆寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定宣告相等物件必須具有相等的雜湊碼。
obj
- 要與之比較的參考物件。
true
;否則返回 false
。hashCode()
,
Hashtable
protected Object clone() throws CloneNotSupportedException
為 true,表達式:x.clone() != x
也為 true,但這些並非必須要滿足的要求。一般情況下:x.clone().getClass() == x.getClass()
為 true,但這並非必須要滿足的要求。x.clone().equals(x)
按照慣例,返回的物件應該通過調用 super.clone 獲得。如果一個類別及其所有的父級類別(Object 除外)都遵守此約定,則 x.clone().getClass() == x.getClass()。
按照慣例,此方法返回的物件應該獨立於該物件(正被複製的物件)。要獲得此獨立性,在 super.clone 返回物件之前,有必要對該物件的一個或多個欄位進行修改。這通常意味著要複製包含正在被複製物件的內部「深層結構」的所有可變物件,並使用對副本的參考替換對這些物件的參考。如果一個類別只包含基本欄位或對不變物件的參考,那麼通常不需要修改 super.clone 返回的物件中的欄位。
Object 類別的 clone 方法執行特定的複製操作。首先,如果此物件的類別不能實作介面 Cloneable,則會拋出 CloneNotSupportedException。注意,所有的陣列都被視為實作介面 Cloneable。否則,此方法會創建此物件的類別的一個新實例,並像通過分派那樣,嚴格使用此物件相應欄位的內容初始化該物件的所有欄位;這些欄位的內容沒有被自我複製。所以,此方法執行的是該物件的「淺表複製」,而不「深層複製」操作。
Object 類別本身不實作介面 Cloneable,所以在類別為 Object 的物件上調用 clone 方法將會導致在運行時拋出異常。
CloneNotSupportedException
- 如果物件的類別不支持 Cloneable
介面,則覆寫 clone
方法的子類別也會拋出此異常,以指示無法複製某個實例。Cloneable
public String toString()
toString
方法會返回一個「以文本方式表示」此物件的字元串。結果應是一個簡明但易於讀懂的資訊表達式。建議所有子類別都覆寫此方法。
Object
類別的 toString
方法返回一個字元串,該字元串由類別名(物件是該類別的一個實例)、at 標記符“@
”和此物件雜湊碼的無符號十六進製表示組成。換句話說,該方法返回一個字元串,它的值等於:
getClass().getName() + '@' + Integer.toHexString(hashCode())
public final void notify()
wait
方法,在物件的監視器上等待。
直到當前執行緒放棄此物件上的鎖定,才能繼續執行被喚醒的執行緒。被喚醒的執行緒將以常規方式與在該物件上主動同步的其他所有執行緒進行競爭;例如,喚醒的執行緒在作為鎖定此物件的下一個執行緒方面沒有可靠的特權或劣勢。
此方法只應由作為此物件監視器的所有者的執行緒來調用。通過以下三種方法之一,執行緒可以成為此物件監視器的所有者:
synchronized
語句的正文。
Class
型別的物件,可以通過執行該類別的同步靜態方法。
一次只能有一個執行緒擁有對象的監視器。
IllegalMonitorStateException
- 如果當前執行緒不是此物件監視器的所有者。notifyAll()
,
wait()
public final void notifyAll()
wait
方法,在物件的監視器上等待。
直到當前執行緒放棄此物件上的鎖定,才能繼續執行被喚醒的執行緒。被喚醒的執行緒將以常規方式與在該物件上主動同步的其他所有執行緒進行競爭;例如,喚醒的執行緒在作為鎖定此物件的下一個執行緒方面沒有可靠的特權或劣勢。
此方法只應由作為此物件監視器的所有者的執行緒來調用。有關執行緒能夠成為監視器所有者的方法的描述,請參閱 notify
方法。
IllegalMonitorStateException
- 如果當前執行緒不是此物件監視器的所有者。notify()
,
wait()
public final void wait(long timeout) throws InterruptedException
notify()
方法或 notifyAll()
方法,或者超過指定的時間量前,導致當前執行緒等待。
當前執行緒必須擁有此物件監視器。
此方法導致當前執行緒(稱之為 T)將其自身放置在物件的等待集中,然後放棄此物件上的所有同步要求。出於執行緒排程目的,在發生以下四種情況之一前,執行緒 T 被禁用,且處於休眠狀態:
在沒有被通知、中斷或逾時的情況下,執行緒還可以喚醒一個所謂的虛假喚醒 (spurious wakeup)。雖然這種情況在實踐中很少發生,但是應用程序必須通過以下方式防止其發生,即對應該導致該執行緒被提醒的條件進行測試,如果不滿足該條件,則繼續等待。換句話說,等待應總是發生在循環中,如下面的範例:
synchronized (obj) { while (<condition does not hold>) obj.wait(timeout); ... // Perform action appropriate to condition }(有關這一主題的更多資訊,請參閱 Doug Lea 撰寫的 Concurrent Programming in Java (Second Edition) (Addison-Wesley, 2000) 中的第 3.2.3 節或 Joshua Bloch 撰寫的 Effective Java Programming Language Guide (Addison-Wesley, 2001) 中的第 50 項。
如果當前執行緒在等待之前或在等待時被任何執行緒中斷,則會拋出 InterruptedException。在按上述形式恢復此物件的鎖定狀態時才會拋出此異常。
注意,由於 wait 方法將當前執行緒放入了物件的等待集中,所以它只能解除此物件的鎖定;可以同步當前執行緒的任何其他物件在執行緒等待時仍處於鎖定狀態。
此方法只應由作為此物件監視器的所有者的執行緒來調用。有關執行緒能夠成為監視器所有者的方法的描述,請參閱 notify
方法。
timeout
- 要等待的最長時間(以毫秒為單位)。
IllegalArgumentException
- 如果逾時值為負。
IllegalMonitorStateException
- 如果當前執行緒不是此物件監視器的所有者。
InterruptedException
- 如果在當前執行緒等待通知之前或者正在等待通知時,任何執行緒中斷了當前執行緒。在拋出此異常時,當前執行緒的中斷狀態 被清除。notify()
,
notifyAll()
public final void wait(long timeout, int nanos) throws InterruptedException
notify()
方法或 notifyAll()
方法,或者其他某個執行緒中斷當前執行緒,或者已超過某個實際時間量前,導致當前執行緒等待。
此方法類似於一個參數的 wait
方法,但它允許更好地控制在放棄之前等待通知的時間量。用毫微秒度量的實際時間量可以通過以下公式計算出來:
1000000*timeout+nanos
在其他所有方面,此方法執行的操作與帶有一個參數的 wait(long)
方法相同。需要特別指出的是,wait(0, 0) 與 wait(0) 相同。
當前執行緒必須擁有此物件監視器。該執行緒發佈對此監視器的所有權,並等待下面兩個條件之一發生:
notify
方法,或 notifyAll
方法通知在此物件的監視器上等待的執行緒醒來。
timeout
毫秒值與 nanos
毫微秒參數值之和指定的逾時時間已用完。
然後,該執行緒等到重新獲得對監視器的所有權後才能繼續執行。
對於某一個參數的版本,實作中斷和虛假喚醒是有可能的,並且此方法應始終在循環中使用:
synchronized (obj) { while (<condition does not hold>) obj.wait(timeout, nanos); ... // Perform action appropriate to condition }此方法只應由作為此物件監視器的所有者的執行緒來調用。有關執行緒能夠成為監視器所有者的方法的描述,請參閱
notify
方法。
timeout
- 要等待的最長時間(以毫秒為單位)。nanos
- 額外時間(以毫微秒為單位,範圍是 0-999999)。
IllegalArgumentException
- 如果逾時值是負數,或者毫微秒值不在 0-999999 範圍內。
IllegalMonitorStateException
- 如果當前執行緒不是此物件監視器的所有者。
InterruptedException
- 如果在當前執行緒等待通知之前或者正在等待通知時,任何執行緒中斷了當前執行緒。在拋出此異常時,當前執行緒的中斷狀態 被清除。public final void wait() throws InterruptedException
notify()
方法或 notifyAll()
方法前,導致當前執行緒等待。換句話說,此方法的行為就好像它僅執行 wait(0) 調用一樣。
當前執行緒必須擁有此物件監視器。該執行緒發佈對此監視器的所有權並等待,直到其他執行緒通過調用 notify
方法,或 notifyAll
方法通知在此物件的監視器上等待的執行緒醒來。然後該執行緒將等到重新獲得對監視器的所有權後才能繼續執行。
對於某一個參數的版本,實作中斷和虛假喚醒是可能的,而且此方法應始終在循環中使用:
synchronized (obj) { while (<condition does not hold>) obj.wait(); ... // Perform action appropriate to condition }此方法只應由作為此物件監視器的所有者的執行緒來調用。有關執行緒能夠成為監視器所有者的方法的描述,請參閱
notify
方法。
IllegalMonitorStateException
- 如果當前執行緒不是此物件監視器的所有者。
InterruptedException
- 如果在當前執行緒等待通知之前或者正在等待通知時,任何執行緒中斷了當前執行緒。在拋出此異常時,當前執行緒的中斷狀態 被清除。notify()
,
notifyAll()
protected void finalize() throws Throwable
finalize
方法,以配置系統資源或執行其他清除。
finalize 的常規協定是:當 JavaTM 虛擬機器已確定尚未終止的任何執行緒無法再通過任何方法存取此物件時,將調用此方法,除非由於準備終止的其他某個物件或類別的終結操作執行了某個操作。finalize 方法可以採取任何操作,其中包括再次使此物件對其他執行緒可用;不過,finalize 的主要目的是在不可撤消地丟棄物件之前執行清除操作。例如,表示輸入/輸出連接的物件的 finalize 方法可執行顯式 I/O 事務,以便在永久丟棄物件之前中斷連接。
Object 類別的 finalize 方法執行非特殊性操作;它僅執行一些常規返回。Object 的子類別可以覆寫此定義。
Java 程式語言不保證哪個執行緒將調用某個給定物件的 finalize 方法。但可以保證在調用 finalize 時,調用 finalize 的執行緒將不會持有任何使用者可見的同步鎖定。如果 finalize 方法拋出未捕獲的異常,那麼該異常將被忽略,並且該物件的終結操作將終止。
在啟用某個物件的 finalize 方法後,將不會執行進一步操作,直到 Java 虛擬機器再次確定尚未終止的任何執行緒無法再通過任何方法存取此物件,其中包括由準備終止的其他物件或類別執行的可能操作,在執行該操作時,對象可能被丟棄。
對於任何給定物件,Java 虛擬機器最多只調用一次 finalize 方法。
finalize
方法拋出的任何異常都會導致此物件的終結操作停止,但可以通過其他方法忽略它。
Throwable
- 此方法拋出的 Exception
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。