摘要:在應用程序的一次執行到另外一次執行,同一對象的返回的哈希碼無須保持一致。則是以對象的哈希碼為實參,以進制無符號整數形式返回此哈希碼的字符串表示形式。
JDK源碼之Object類
1 private static native void registerNatives();
Java中,用native關鍵字修飾的函數表明該方法的實現并不是在Java中去完成,而是由C++去完成,并被編譯成了.dll,由Java去調用。方法的具體實現體在dll文件中,對于像Window,Linux,Mac不同平臺,其具體實現有所不同,主要作用是將C++的方法映射到Java中,實現方法命名的解藕。
2 public final native Class> getClass();
clone()方法又是一個被聲明為native的方法,因此,我們知道了clone()方法并不是Java的原生方法,具體的實現是有C++完成的,其目的是創建并返回此對象的一個副本,在List集合中,會經常用到,比如說,list集合擴容。
3 public final native Class> getClass();
在Java中,每一個類都有相同的特征和行為的實例的抽象并進行描述,例如,都具有類的名稱,由類加載器去加載,
都有包,父類的屬性和方法,Java中有專門定義的一個類,class,可以通過getClass方法,就可以獲取類的所有特征,在Java的反射技術中,大量使用這個方法。
4 public boolean equals(Object obj);
在此方法中,返回的結果是this == obj ,可知,Object的原生的equals()方法調用的正是==,與==具有相同的含義。在object類中,此標尺即為==。當然,這個標尺不是固定的,其他類中可以按照實際的需要對此標尺含義進行重定義。如String類中則是依據字符串內容是否相等來重定義了此標尺含義。如此可以增加類的功能型和實際編碼的靈活性。當然了,如果自定義的類沒有重寫equals()方法來重新定義此標尺,那么默認的將是其父equals(),直到object基類。
5 public native int hashCode();
hashCode()方法返回一個整形數值,表示該對象的哈希碼值。在Java應用程序程序執行期間,對于同一對象多次調用hashCode()方法時,其返回的哈希碼是相同的,前提是將對象進行equals比較時所用的標尺信息未做修改。在Java應用程序的一次執行到另外一次執行,同一對象的hashCode()返回的哈希碼無須保持一致。如果兩個對象相等(依據:調用equals()方法),那么這兩個對象調用hashCode()返回的哈希碼也必須相等;反之,兩個對象調用hasCode()返回的哈希碼相等,這兩個對象不一定相等。以集合類中,以Set為例,當新加一個對象時,需要判斷現有集合中是否已經存在與此對象相等的對象,如果沒有hashCode()方法,需要將Set進行一次遍歷,并逐一用equals()方法判斷兩個對象是否相等,此種算法時間復雜度為o(n)。通過借助于hasCode方法,先計算出即將新加入對象的哈希碼,然后根據哈希算法計算出此對象的位置,直接判斷此位置上是否已有對象即可。
6 public String toString();
getClass()返回對象的類對象,getClassName()以String形式返回類對象的名稱(含包名)。
Integer.toHexString(hashCode())則是以對象的哈希碼為實參,以16進制無符號整數形式返回此哈希碼的字符串表示形式。例如調用toString,就會返回以包名類名和16進制連接的名字。
7 public final native void notify();
喚醒所有在這個對象的監視器上等待的線程,線程通過調用一個對象來監視對象的監視器。在當前線程放棄對該對象的鎖定之前,喚醒線程將無法繼續進行。被喚醒的線程將以通常的方式與可能在此對象上積極競爭同步的任何其他線程競爭;例如,被喚醒的線程在成為下一個鎖定此對象的線程時沒有可靠的特權或缺點。
8 public final native void notifyAll();
同 notify ,其所在線程不會立即釋放所持有的鎖,直到其所在同步代碼塊中的代碼執行完畢,此時釋放鎖,因此,如果其同步代碼塊后還有代碼,其執行則依賴于JVM的線程調度
9 public final native void wait(long timeout) throws InterruptedException;
wait(...)方法調用后當前線程將立即阻塞,且適當其所持有的同步代碼塊中的鎖,直到被喚醒或超時或打斷后且重新獲取到鎖后才能繼續執行;
10 protected void finalize() throws Throwable { }
Object中定義finalize方法表明Java中每一個對象都將具有finalize這種行為,其具體調用時機在:JVM準備對此對形象所占用的內存空間進行垃圾回收前,將被調用。由此可以看出,此方法并不是由我們主動去調用的(雖然可以主動去調用,此時與其他自定義方法無異)
11 為什么所有的類的父類都是Object類,而有些源碼并沒有繼承Object
在編譯源代碼時,當遇到沒有父類的類時,編譯器會將其指定一個默認的父類(一般為Object),而虛擬機在處理到這個類時,由于這個類已經有一個默認的父類了,因此,VM仍然會按著常規的方法來處理每一個類。對于這種情況,從編譯后的二進制角度來看,所有的類都會有一個父類。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77315.html
摘要:接口解釋這個序列化接口沒有任何方法和域,僅用于標識序列化的語意。用于對兩個實例化對象比較大小這個接口是一個只讀的字符序列。的序列化機制是通過在運行時判斷類的來驗證版本一致性的。然后從開始再對每一個字符進行判斷是不是所要替換的字符。 1 接口解釋 (1)Serializable 這個序列化接口沒有任何方法和域,僅用于標識序列化的語意。 (2)Comparable 用于對兩個實例化對象...
摘要:問題的特性的實現原理是否可重入是否是公平鎖的優化的五種使用方式簡介關鍵字是里面最基本的同步手段,它經過編譯之后,會在同步塊的前后分別生成和字節碼指令,這兩個字節碼指令都需要一個引用類型的參數來指明要鎖定和解鎖的對象。問題 (1)synchronized的特性? (2)synchronized的實現原理? (3)synchronized是否可重入? (4)synchronized是否是公平鎖?...
摘要:問題的特性的實現原理是否可重入是否是公平鎖的優化的五種使用方式簡介關鍵字是里面最基本的同步手段,它經過編譯之后,會在同步塊的前后分別生成和字節碼指令,這兩個字節碼指令都需要一個引用類型的參數來指明要鎖定和解鎖的對象。問題 (1)synchronized的特性? (2)synchronized的實現原理? (3)synchronized是否可重入? (4)synchronized是否是公平鎖?...
摘要:問題的特性的實現原理是否可重入是否是公平鎖的優化的五種使用方式簡介關鍵字是里面最基本的同步手段,它經過編譯之后,會在同步塊的前后分別生成和字節碼指令,這兩個字節碼指令都需要一個引用類型的參數來指明要鎖定和解鎖的對象。問題 (1)synchronized的特性? (2)synchronized的實現原理? (3)synchronized是否可重入? (4)synchronized是否是公平鎖?...
閱讀 2716·2021-09-24 09:47
閱讀 4366·2021-08-27 13:10
閱讀 2981·2019-08-30 15:44
閱讀 1281·2019-08-29 12:56
閱讀 2594·2019-08-28 18:07
閱讀 2614·2019-08-26 14:05
閱讀 2553·2019-08-26 13:41
閱讀 1265·2019-08-26 13:33