1芋酌、簡(jiǎn)介
1.1雁佳、英語(yǔ)注釋
Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.
1.2糖权、中國(guó)話
Object類是Java類繼承的頂層。所有類繼承自O(shè)bject温兼,包括Arrays的很多
類募判、都需要實(shí)現(xiàn)Object的方法咒唆。
2、代碼分析
2.1装处、所屬包及其類名
package java.lang;
public class Object {
//類成員及其方法
}
2.2浸船、類成員
無(wú)
2.3、類方法
Class<?> getClass()
public final native Class<?> getClass();
/*
*返回一個(gè)對(duì)象(object)的運(yùn)行時(shí)類登淘,其返回值是一個(gè)Class類封字。
*/
int hashCode()
public native int hashCode();
/*
*返回一個(gè)對(duì)象(object)的哈希值耍鬓。該方法是一個(gè)本地方法流妻,哈希值
*需要在具體運(yùn)行機(jī)器上進(jìn)行計(jì)算绅这。
*/
值得注意的是:
在編寫實(shí)現(xiàn)hashCode()方法時(shí),我們需要遵守一些約定:
1在應(yīng)用程序執(zhí)行期間峭判,如果一個(gè)對(duì)象用于equals()方法的屬性沒(méi)有被修改的話棕叫,那么要保證對(duì)該對(duì)象多次返回的hashcode值要相等。
2疗认、如果2個(gè)對(duì)象通過(guò)equals()方法判斷的結(jié)果為true伏钠,那么要保證二者的hashcode值相等。
3缎浇、如果2個(gè)對(duì)象通過(guò)equals()方法判斷的結(jié)果為false赴肚,那么對(duì)二者h(yuǎn)ashcode值是否相等并沒(méi)有明確要求。如果不相等指厌,那么能夠提升散列表的性能踊跟。
boolean equals(Object obj)
public boolean equals(Object obj) {
return (this == obj);
}
/*
*判斷兩個(gè)對(duì)象是否相等,返回值是boolean值箕憾,該方法需要子類重寫拳昌。
*在Object的對(duì)象中,其相等判斷是 ‘==’.
*‘==’表示的是變量值完成相同(對(duì)于基礎(chǔ)類型扁远,地址中存儲(chǔ)的是值,引用
*類型則存儲(chǔ)指向?qū)嶋H對(duì)象的地址)并闲;
*在很多子類中谷羞,復(fù)寫該方法之后,比較的是兩個(gè)類的內(nèi)容是否相同犀填。
*/
Object clone() throws CloneNotSupportedException
protected native Object clone() throws CloneNotSupportedException;
/*
*這是一個(gè)只有子類才能訪問(wèn)的方法嗓违。
*該方法是一個(gè)本地方法蹂季;返回的是一個(gè)引用,該引用指向的是新的clone
*出來(lái)的對(duì)象偿洁,此對(duì)象與原對(duì)象分別占用不同的堆空間涕滋。
*/
clone()方法的解析見(jiàn)深拷貝與淺拷貝
String toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
/*
*返回一個(gè)能代表該對(duì)象的字符串,該字符串由類名以及該對(duì)象的十六進(jìn)制的哈希值拼成溯饵。
*在通常情況下爱榕、其子類需要復(fù)寫該方法坡慌,方式為其類名和其類成員組成的字符串。
*/
void notify();
public final native void notify();
/*
*本地方法
*喚醒在此對(duì)象監(jiān)視器上等待的單個(gè)線程,若在此監(jiān)控器上有多個(gè)線程跪者,則任意喚醒一個(gè)熄求。
*/
void notifyAll();
public final native void notifyAll();
/*
*本地方法
*喚醒在此對(duì)象監(jiān)視器上等待的所有線程弟晚。
*/
notify()/notifyAll()方法調(diào)用后逾苫,其所在線程不會(huì)立即釋放所持有的鎖枚钓,直>到其所在同步代碼塊中的代碼執(zhí)行完畢搀捷,此時(shí)釋放鎖,因此嫩舟,如果其同
步代碼塊后還有代碼家厌,其執(zhí)行則依賴于JVM的線程調(diào)度。
void wait(long timeout) throws InterruptedException;
public final native void wait(long timeout) throws InterruptedException;
/*
*本地方法
*該方法用于將線程阻塞像街。只有當(dāng)timeout為零或者調(diào)用notify()或者notifyAll()方法時(shí)镰绎,
*才會(huì)將線程喚醒。
*/
wait所阻塞的線程被喚醒后立即釋放鎖随静。
void wait(long timeout, int nanos) throws InterruptedException
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException( "nanosecond timeout value out of range");
}
if (nanos > 0) {
timeout++;
}
wait(timeout);
}
/*
*設(shè)定時(shí)間的的wait(long time)方法調(diào)用吗讶。
*/
void wait() throws InterruptedException
public final void wait() throws InterruptedException {
wait(0);
}
/*
*此時(shí)無(wú)倒計(jì)時(shí)間照皆,所以屬于線程無(wú)限循環(huán)的等待,直到調(diào)用notify()/notifyAll()方法將該線程喚醒昭卓。
*/
void finalize() throws Throwable
protected void finalize() throws Throwable { }
/*
*當(dāng)垃圾回收器判斷已經(jīng)沒(méi)有引用指向該對(duì)象上時(shí)調(diào)用該方法瘟滨。
*/
Java是門好語(yǔ)言。