本文轉自: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.