java學習之Object

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 { }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章