rt.jar -> java.lang包下
package java.lang;
//任何類的超類(父類)
public class Object {
/**
* private :私有化,只有這個類中才有權限調用
* static :靜態話,不用創建對象就可以調用
* native :native表示該方法的實現java本身並沒有完成,而是有c/c++來完成,形成.dll文件。
*/
private static native void registerNatives();
/**
* 靜態代碼塊:表示jvm加載該類時就會被執行
*/
static {
registerNatives();
}
/**
* final : 修飾變量 表示該變量爲常量,如果修飾的變量爲引用數據類型,則其地址值爲固定不變的,不能重新爲其創建對象
* 修飾方法 表示該方法不能被重寫,final修飾的方法會被編譯器內聯方式載入,使其調用更快捷.private method()
* 與 private final method()效果相同
* 修飾類 表示該類不能被繼承* 本方法是獲得該類的完整名稱。
*/
public final native Class<?> getClass();
/**
* 返回hashCode值,這個值根據哈希表來的
*/
public native int hashCode();
public boolean equals(Object obj) {
return (this == obj);
}
/**
* clone()方法是創建並返回該對象的一個副本,注意,創建後,就是兩個對象,和引用同一個對象不一樣。也就是說:x.clone() ! = x爲true。
* 一般情況下,x.clone().getClass() = = x.getClass()爲true,x.clone().equals(x)也爲真。
* 如果在對一個對象希望擁有它的全部屬性,並且又能隨時修改,但同時又不會影響原有的對象,可以使用clone方法,有點類似於SVN的分支。
* 而且:如果想要對一個對象進行clone,必須實現Cloneable接口,而且要重寫clone方法,否則會報CloneNotSupportedException異常。
*/
protected native Object clone() throws CloneNotSupportedException;
/**
* 該方法返回對象的字符串表示形式,開發人員能夠清晰的看到一個對象的各種屬性。在官方建議上,建議所有的方法都重寫這個方法。
*/
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
/**
* 隨機喚醒一個線程
*/
public final native void notify();
/**
* 喚醒所有線程
*/
public final native void notifyAll();
/**
* 線程進入等待狀態,可傳入等待的時間
*/
public final native void wait(long timeout) 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);
}
/**
* 線程等待時間爲0
*/
public final void wait() throws InterruptedException {
wait(0);
}
/**
* finalize()是Object的protected方法,子類可以覆蓋該方法以實現資源清理工作,GC在回收對象之前調用該方法。但Java中的finalize的調用具有不確定性
* 不建議用finalize方法完成“非內存資源”的清理工作,但建議用於:
* ① 清理本地對象(通過JNI創建的對象);
* ② 作爲確保某些非內存資源(如Socket、文件等)釋放的一個補充:在finalize方法中顯式調用其他資源釋放方法。其原因可見下文[finalize的問題]
*/
protected void finalize() throws Throwable { }
}