成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

JDK源碼解析系列之object

binaryTree / 1996人閱讀

摘要:在應(yīng)用程序的一次執(zhí)行到另外一次執(zhí)行,同一對(duì)象的返回的哈希碼無(wú)須保持一致。則是以對(duì)象的哈希碼為實(shí)參,以進(jìn)制無(wú)符號(hào)整數(shù)形式返回此哈希碼的字符串表示形式。

JDK源碼之Object類(lèi)

1 private static native void registerNatives();

Java中,用native關(guān)鍵字修飾的函數(shù)表明該方法的實(shí)現(xiàn)并不是在Java中去完成,而是由C++去完成,并被編譯成了.dll,由Java去調(diào)用。方法的具體實(shí)現(xiàn)體在dll文件中,對(duì)于像Window,Linux,Mac不同平臺(tái),其具體實(shí)現(xiàn)有所不同,主要作用是將C++的方法映射到Java中,實(shí)現(xiàn)方法命名的解藕。

2 public final native Class getClass();

clone()方法又是一個(gè)被聲明為native的方法,因此,我們知道了clone()方法并不是Java的原生方法,具體的實(shí)現(xiàn)是有C++完成的,其目的是創(chuàng)建并返回此對(duì)象的一個(gè)副本,在List集合中,會(huì)經(jīng)常用到,比如說(shuō),list集合擴(kuò)容。

3 public final native Class getClass();

在Java中,每一個(gè)類(lèi)都有相同的特征和行為的實(shí)例的抽象并進(jìn)行描述,例如,都具有類(lèi)的名稱(chēng),由類(lèi)加載器去加載,
都有包,父類(lèi)的屬性和方法,Java中有專(zhuān)門(mén)定義的一個(gè)類(lèi),class,可以通過(guò)getClass方法,就可以獲取類(lèi)的所有特征,在Java的反射技術(shù)中,大量使用這個(gè)方法。

4 public boolean equals(Object obj);

在此方法中,返回的結(jié)果是this == obj ,可知,Object的原生的equals()方法調(diào)用的正是==,與==具有相同的含義。在object類(lèi)中,此標(biāo)尺即為==。當(dāng)然,這個(gè)標(biāo)尺不是固定的,其他類(lèi)中可以按照實(shí)際的需要對(duì)此標(biāo)尺含義進(jìn)行重定義。如String類(lèi)中則是依據(jù)字符串內(nèi)容是否相等來(lái)重定義了此標(biāo)尺含義。如此可以增加類(lèi)的功能型和實(shí)際編碼的靈活性。當(dāng)然了,如果自定義的類(lèi)沒(méi)有重寫(xiě)equals()方法來(lái)重新定義此標(biāo)尺,那么默認(rèn)的將是其父equals(),直到object基類(lèi)。

5 public native int hashCode();

hashCode()方法返回一個(gè)整形數(shù)值,表示該對(duì)象的哈希碼值。在Java應(yīng)用程序程序執(zhí)行期間,對(duì)于同一對(duì)象多次調(diào)用hashCode()方法時(shí),其返回的哈希碼是相同的,前提是將對(duì)象進(jìn)行equals比較時(shí)所用的標(biāo)尺信息未做修改。在Java應(yīng)用程序的一次執(zhí)行到另外一次執(zhí)行,同一對(duì)象的hashCode()返回的哈希碼無(wú)須保持一致。如果兩個(gè)對(duì)象相等(依據(jù):調(diào)用equals()方法),那么這兩個(gè)對(duì)象調(diào)用hashCode()返回的哈希碼也必須相等;反之,兩個(gè)對(duì)象調(diào)用hasCode()返回的哈希碼相等,這兩個(gè)對(duì)象不一定相等。以集合類(lèi)中,以Set為例,當(dāng)新加一個(gè)對(duì)象時(shí),需要判斷現(xiàn)有集合中是否已經(jīng)存在與此對(duì)象相等的對(duì)象,如果沒(méi)有hashCode()方法,需要將Set進(jìn)行一次遍歷,并逐一用equals()方法判斷兩個(gè)對(duì)象是否相等,此種算法時(shí)間復(fù)雜度為o(n)。通過(guò)借助于hasCode方法,先計(jì)算出即將新加入對(duì)象的哈希碼,然后根據(jù)哈希算法計(jì)算出此對(duì)象的位置,直接判斷此位置上是否已有對(duì)象即可。

6 public String toString();

getClass()返回對(duì)象的類(lèi)對(duì)象,getClassName()以String形式返回類(lèi)對(duì)象的名稱(chēng)(含包名)。
Integer.toHexString(hashCode())則是以對(duì)象的哈希碼為實(shí)參,以16進(jìn)制無(wú)符號(hào)整數(shù)形式返回此哈希碼的字符串表示形式。例如調(diào)用toString,就會(huì)返回以包名類(lèi)名和16進(jìn)制連接的名字。

7 public final native void notify();

喚醒所有在這個(gè)對(duì)象的監(jiān)視器上等待的線(xiàn)程,線(xiàn)程通過(guò)調(diào)用一個(gè)對(duì)象來(lái)監(jiān)視對(duì)象的監(jiān)視器。在當(dāng)前線(xiàn)程放棄對(duì)該對(duì)象的鎖定之前,喚醒線(xiàn)程將無(wú)法繼續(xù)進(jìn)行。被喚醒的線(xiàn)程將以通常的方式與可能在此對(duì)象上積極競(jìng)爭(zhēng)同步的任何其他線(xiàn)程競(jìng)爭(zhēng);例如,被喚醒的線(xiàn)程在成為下一個(gè)鎖定此對(duì)象的線(xiàn)程時(shí)沒(méi)有可靠的特權(quán)或缺點(diǎn)。

8 public final native void notifyAll();

同 notify ,其所在線(xiàn)程不會(huì)立即釋放所持有的鎖,直到其所在同步代碼塊中的代碼執(zhí)行完畢,此時(shí)釋放鎖,因此,如果其同步代碼塊后還有代碼,其執(zhí)行則依賴(lài)于JVM的線(xiàn)程調(diào)度

9 public final native void wait(long timeout) throws InterruptedException;

wait(...)方法調(diào)用后當(dāng)前線(xiàn)程將立即阻塞,且適當(dāng)其所持有的同步代碼塊中的鎖,直到被喚醒或超時(shí)或打斷后且重新獲取到鎖后才能繼續(xù)執(zhí)行;

10 protected void finalize() throws Throwable { }

Object中定義finalize方法表明Java中每一個(gè)對(duì)象都將具有finalize這種行為,其具體調(diào)用時(shí)機(jī)在:JVM準(zhǔn)備對(duì)此對(duì)形象所占用的內(nèi)存空間進(jìn)行垃圾回收前,將被調(diào)用。由此可以看出,此方法并不是由我們主動(dòng)去調(diào)用的(雖然可以主動(dòng)去調(diào)用,此時(shí)與其他自定義方法無(wú)異)

11 為什么所有的類(lèi)的父類(lèi)都是Object類(lèi),而有些源碼并沒(méi)有繼承Object

在編譯源代碼時(shí),當(dāng)遇到?jīng)]有父類(lèi)的類(lèi)時(shí),編譯器會(huì)將其指定一個(gè)默認(rèn)的父類(lèi)(一般為Object),而虛擬機(jī)在處理到這個(gè)類(lèi)時(shí),由于這個(gè)類(lèi)已經(jīng)有一個(gè)默認(rèn)的父類(lèi)了,因此,VM仍然會(huì)按著常規(guī)的方法來(lái)處理每一個(gè)類(lèi)。對(duì)于這種情況,從編譯后的二進(jìn)制角度來(lái)看,所有的類(lèi)都會(huì)有一個(gè)父類(lèi)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/77315.html

相關(guān)文章

  • java源碼

    摘要:集合源碼解析回歸基礎(chǔ),集合源碼解析系列,持續(xù)更新和源碼分析與是兩個(gè)常用的操作字符串的類(lèi)。這里我們從源碼看下不同狀態(tài)都是怎么處理的。 Java 集合深入理解:ArrayList 回歸基礎(chǔ),Java 集合深入理解系列,持續(xù)更新~ JVM 源碼分析之 System.currentTimeMillis 及 nanoTime 原理詳解 JVM 源碼分析之 System.currentTimeMi...

    Freeman 評(píng)論0 收藏0
  • JDK源碼解析系列String

    摘要:接口解釋這個(gè)序列化接口沒(méi)有任何方法和域,僅用于標(biāo)識(shí)序列化的語(yǔ)意。用于對(duì)兩個(gè)實(shí)例化對(duì)象比較大小這個(gè)接口是一個(gè)只讀的字符序列。的序列化機(jī)制是通過(guò)在運(yùn)行時(shí)判斷類(lèi)的來(lái)驗(yàn)證版本一致性的。然后從開(kāi)始再對(duì)每一個(gè)字符進(jìn)行判斷是不是所要替換的字符。 1 接口解釋 (1)Serializable 這個(gè)序列化接口沒(méi)有任何方法和域,僅用于標(biāo)識(shí)序列化的語(yǔ)意。 (2)Comparable 用于對(duì)兩個(gè)實(shí)例化對(duì)象...

    gnehc 評(píng)論0 收藏0
  • 死磕 java同步系列synchronized解析

    摘要:?jiǎn)栴}的特性的實(shí)現(xiàn)原理是否可重入是否是公平鎖的優(yōu)化的五種使用方式簡(jiǎn)介關(guān)鍵字是里面最基本的同步手段,它經(jīng)過(guò)編譯之后,會(huì)在同步塊的前后分別生成和字節(jié)碼指令,這兩個(gè)字節(jié)碼指令都需要一個(gè)引用類(lèi)型的參數(shù)來(lái)指明要鎖定和解鎖的對(duì)象。問(wèn)題 (1)synchronized的特性? (2)synchronized的實(shí)現(xiàn)原理? (3)synchronized是否可重入? (4)synchronized是否是公平鎖?...

    番茄西紅柿 評(píng)論0 收藏0
  • 死磕 java同步系列synchronized解析

    摘要:?jiǎn)栴}的特性的實(shí)現(xiàn)原理是否可重入是否是公平鎖的優(yōu)化的五種使用方式簡(jiǎn)介關(guān)鍵字是里面最基本的同步手段,它經(jīng)過(guò)編譯之后,會(huì)在同步塊的前后分別生成和字節(jié)碼指令,這兩個(gè)字節(jié)碼指令都需要一個(gè)引用類(lèi)型的參數(shù)來(lái)指明要鎖定和解鎖的對(duì)象。問(wèn)題 (1)synchronized的特性? (2)synchronized的實(shí)現(xiàn)原理? (3)synchronized是否可重入? (4)synchronized是否是公平鎖?...

    番茄西紅柿 評(píng)論0 收藏0
  • 死磕 java同步系列synchronized解析

    摘要:?jiǎn)栴}的特性的實(shí)現(xiàn)原理是否可重入是否是公平鎖的優(yōu)化的五種使用方式簡(jiǎn)介關(guān)鍵字是里面最基本的同步手段,它經(jīng)過(guò)編譯之后,會(huì)在同步塊的前后分別生成和字節(jié)碼指令,這兩個(gè)字節(jié)碼指令都需要一個(gè)引用類(lèi)型的參數(shù)來(lái)指明要鎖定和解鎖的對(duì)象。問(wèn)題 (1)synchronized的特性? (2)synchronized的實(shí)現(xiàn)原理? (3)synchronized是否可重入? (4)synchronized是否是公平鎖?...

    luxixing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<