java Object 類 源碼學習

本文轉自:http://www.cnblogs.com/lwbqqyumidi/p/3693015.html 
感謝作者無私的分享!

本文將對 java 的 Object 類源碼進行學習,以期更深入的瞭解java的原理和設計思想。

Object類是Java中其他所有類的祖先,沒有Object類Java面向對象無從談起。作爲其他所有類的基類,Object具有哪些屬性和行爲,是Java語言設計背後的思維體現。

Object類位於java.lang包中,java.lang包包含着Java最基礎和核心的類,在編譯時會自動導入。Object類沒有定義屬性,一共有13個方法,具體的類定義結構如下圖:


1.類構造器public Object();

大部分情況下,Java中通過形如 new A(args..)形式創建一個屬於該類型的對象。其中A即是類名,A(args..)即此類定義中相對應的構造函數。通過此種形式創建的對象都是通過類中的構造函數完成。爲體現此特性,Java中規定:在類定義過程中,對於未定義構造函數的類,默認會有一個無參數的構造函數,作爲所有類的基類,Object類自然要反映出此特性,在源碼中,未給出Object類構造函數定義,但實際上,此構造函數是存在的。

當然,並不是所有的類都是通過此種方式去構建,也自然的,並不是所有的類構造函數都是public。

2.private static native void registerNatives();

registerNatives函數前面有native關鍵字修飾,Java中,用native關鍵字修飾的函數表明該方法的實現並不是在Java中去完成,而是由C/C++去完成,並被編譯成了.dll,由Java去調用。方法的具體實現體在dll文件中,對於不同平臺,其具體實現應該有所不同。用native修飾,即表示操作系統,需要提供此方法,Java本身需要使用。具體到registerNatives()方法本身,其主要作用是將C/C++中的方法映射到Java中的native方法,實現方法命名的解耦。

既然如此,可能有人會問,registerNatives()修飾符爲private,且並沒有執行,作用何以達到?其實,在Java源碼中,此方法的聲明後有緊接着一段靜態代碼塊:

    private static native void registerNatives();
    static {
        registerNatives();
    }

3.
















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章