Java的Object類學(xué)習(xí)

? ? ? 一、 hashcode()方法是個(gè)native方法,返回該對(duì)象的哈希碼,涉及到計(jì)算哈希碼的數(shù)據(jù)結(jié)構(gòu)都會(huì)用到此方法,如HashMap,HashSet,HashTable

hashcode方法設(shè)計(jì)的三個(gè)協(xié)定:

1、同一個(gè)對(duì)象(“不變”)多次hashcode的值是一樣的

2、不同的對(duì)象,hashcode的值不一樣

3、equals為false的兩個(gè)對(duì)象的hashcode返回值可能相等,我們重寫hashcode的時(shí)候,盡量要使這兩個(gè)對(duì)象的hashcode值不等

? ? ? ?二、 equals()方法的原始實(shí)現(xiàn)是比較兩個(gè)對(duì)象的地址,equals方法的協(xié)定:

1、任何非空對(duì)象x滿足x.equals(x)返回true

2、對(duì)稱性

3、傳遞性

4、一致性:參與equals計(jì)算的信息沒有更改,那么每次equals返回的結(jié)果不變

5、非空的x,x.equals(null)返回false

重寫hashcode和equals的時(shí)候特別注意它們的協(xié)定


? ? 三、getClass()方法返回的是類運(yùn)行時(shí)的對(duì)象

如:class A extend? class B

B b = new B();

b.super().getClass()返回的也是B類對(duì)象


四、wait和notify

else:獲取鎖和擁有鎖對(duì)象的監(jiān)視器是一個(gè)概念

/**wait()方法是Object的成員方法,在調(diào)用wait方法后,持有對(duì)象鎖的當(dāng)前線程將釋放鎖,并掛起,? ? ?*直到下次被notify()或者notifyAll,它才會(huì)重新嘗試獲取鎖,

? ?*那么當(dāng)它沒有獲取到鎖的時(shí)候,它還是會(huì)阻塞在當(dāng)前位置。

? ?*注意:1、wait方法的調(diào)用要在同步方法或者代碼塊中

? ? ? 2、調(diào)用wait方法的一定是鎖對(duì)象

? ? ? 3、判斷條件要用while語(yǔ)法,因?yàn)楫?dāng)線程被喚醒后,它會(huì)重新走while循環(huán),如果用if就會(huì)有問題(多個(gè)線程等待被喚醒后,都會(huì)從等待處往下執(zhí)行)

? ? ? 4、notify的調(diào)用同wait調(diào)用方式一樣,但是notify調(diào)用后它不會(huì)立式釋放鎖,要等同步方法或代碼塊執(zhí)行完才會(huì)釋放鎖

? ? ? 5、notify會(huì)隨機(jī)喚醒等待的線程(同一個(gè)對(duì)象鎖調(diào)用的wait

*/


五、finalize()方法是一個(gè)protect修飾的普通方法,當(dāng)JVM在進(jìn)行垃圾回收拾時(shí),被回收的對(duì)象,就是調(diào)用該對(duì)象集成自O(shè)bject的finalize方法,可以通過重寫該方法來打印一些對(duì)項(xiàng)目有意義的日志,或者其它的操作



六、wait(Long timeout)

用法同wait()方法,當(dāng)在timeout之前沒有被喚醒,則自動(dòng)喚醒,然后在等待出繼續(xù)執(zhí)行

七、wait(long timeout,int nanos)

nanos為一個(gè)毫微妙時(shí)間,看下源碼吧


八、registerNatives()是個(gè)靜態(tài)方法

就是對(duì)幾個(gè)本地方法進(jìn)行注冊(cè)(也就是初始化java方法映射到C的方法)


九、toString(),上源碼(全類名+@+對(duì)象的哈希碼取16進(jìn)制)

????????一般建議子類重寫toString方法,這樣可以打印一些有意義的東西,個(gè)人覺得toString方法特

? ? ? ? 別好用,特別是在表示一個(gè)對(duì)象的時(shí)候

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,265評(píng)論 0 62
  • 轉(zhuǎn)自CSDN文章:Java面試題集 求職是在每個(gè)技術(shù)人員的生涯中都要經(jīng)歷多次。對(duì)于我們大部分人而言,在進(jìn)入自己心儀...
    流浪java閱讀 878評(píng)論 0 12
  • 前晚TB唱k有人點(diǎn)了李宗盛的《寂寞難耐》,又一次被李宗盛打動(dòng),當(dāng)然并不是因?yàn)榧拍y耐→_→。 總是平白無(wú)故 難過起...
    燕尤心閱讀 1,129評(píng)論 1 2
  • Amy花魅千夜閱讀 126評(píng)論 0 14

友情鏈接更多精彩內(nèi)容