真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java中Object類是什么

java中Object類是什么?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

十年的利川網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整利川建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“利川網(wǎng)站設(shè)計”,“利川網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

Object類有哪些方法

registerNatives()【底層實現(xiàn)、不研究】hashCode()equals(Object obj)clone()toString()notify()notifyAll()wait(long timeout)【還有重載了兩個】finalize()Object一共有11個方法,其中一個為底層的實現(xiàn)registerNatives(),其中兩個wait()和wait(long timeout, int nanos)重載方法。還有一個屬性:返回字節(jié)碼文件對象

hashCode

public native int hashCode();

由native方法底層實現(xiàn)了

equals

public boolean equals(Object obj) {
    return (this == obj);
}

直接判斷內(nèi)存地址了

想要更加清晰它們究竟是做什么的,我們來讀讀它的注釋:

java中Object類是什么

java中Object類是什么

根據(jù)注釋我們可以總結(jié)以下的要點:

  • 重寫equals()方法,就必須重寫hashCode()的方法
  • equals()方法默認(rèn)是比較對象的地址,使用的是==等值運算符
  • hashCode()方法對底層是散列表的對象有提升性能的功能
  • 同一個對象(如果該對象沒有被修改):那么重復(fù)調(diào)用hashCode()那么返回的int是相同的!
  • hashCode()方法默認(rèn)是由對象的地址轉(zhuǎn)換而來的
  • equals()方法還有5個默認(rèn)的原則:
    • 自反性--->調(diào)用equals()返回的是true,無論這兩個對象誰調(diào)用equals()都好,返回的都是true
    • 一致性--->只要對象沒有被修改,那么多次調(diào)用還是返回對應(yīng)的結(jié)果!
    • 傳遞性--->x.equals(y)y.equals(z)都返回true,那么可以得出:x.equals(z)返回true
    • 對稱性--->x.equals(y)y.equals(x)結(jié)果應(yīng)該是相等的。
    • 傳入的參數(shù)為null,返回的是false

為啥說hashCode()以散列表為底層帶來性能的提升是很容易理解的。我們再來回顧一下HashMap的插入:

java中Object類是什么

如果hash值都不相等,那么可以直接判斷該key是不相等的了!

toString

toString方法主要是用來標(biāo)識該對象的

java中Object類是什么

clone

  • clone方法用于對象的克隆,一般想要克隆出的對象是獨立的(與原有的對象是分開的)
  • 深拷貝指的是該對象的成員變量(如果是可變引用)都應(yīng)該克隆一份,淺拷貝指的是成員變量沒有被克隆一份
  • 如何克隆對象?

    • 克隆的對象要實現(xiàn)Cloneable接口
    • 重寫clone方法,最好修飾成public

wait & notify & notifyAll

wait和notify方法其實就是Java給我們提供讓線程之間通信的API。

  • 無論是wait、notify還是notifyAll()都需要由監(jiān)聽器對象(鎖對象)來進行調(diào)用
    • 簡單來說:他們都是在同步代碼塊中調(diào)用的,否則會拋出異常!
  • notify()喚醒的是在等待隊列的某個線程(不確定會喚醒哪個),notifyAll()喚醒的是等待隊列所有線程
  • 導(dǎo)致wait()的線程被喚醒可以有4種情況
    • 該線程被中斷
    • wait()時間到了
    • notify()喚醒
    • notifyAll()喚醒
  • 調(diào)用wait()的線程會釋放掉鎖

為什么wait和notify在Object方法上

  • 因為我們的鎖是對象鎖【要是忘記的同學(xué)可回顧:Java鎖機制了解一下】,每個對象都可以成為鎖。讓當(dāng)前線程等待某個對象的鎖,當(dāng)然應(yīng)該通過這個對象來操作了
  • 鎖對象是任意的,所以這些方法必須定義在Object類中

Thread.sleep()Object.wait()

二者都可以暫停當(dāng)前線程,釋放CPU控制權(quán)。

  • 主要的區(qū)別在于Object.wait()在釋放CPU同時,釋放了對象鎖的控制。
  • Thread.sleep()沒有對鎖釋放

但是要注意的是:

notify方法調(diào)用后,被喚醒的線程不會立馬獲得到鎖對象。而是等待notify的synchronized代碼塊執(zhí)行完之后才會獲得鎖對象

finalize

finalize()`方法將在垃圾回收器清除對象之前調(diào)用,但該方法不知道何時調(diào)用,具有不定性

一般我們都不會重寫它~

一個對象的finalize()方法只會被調(diào)用一次,而且finalize()被調(diào)用不意味著gc會立即回收該對象,所以有可能調(diào)用finalize()后,該對象又不需要被回收了,然后到了真正要被回收的時候,因為前面調(diào)用過一次,所以不會調(diào)用finalize(),產(chǎn)生問題。

java中Object類是什么

感謝各位的閱讀!看完上述內(nèi)容,你們對java中Object類是什么大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站標(biāo)題:java中Object類是什么
網(wǎng)站URL:http://weahome.cn/article/jogsde.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部