java中Object類是什么?這個問題可能是我們?nèi)粘W習或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
十年的利川網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網(wǎng)站建設的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整利川建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“利川網(wǎng)站設計”,“利川網(wǎng)站推廣”以來,每個客戶項目都認真落實執(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)存地址了
想要更加清晰它們究竟是做什么的,我們來讀讀它的注釋:
根據(jù)注釋我們可以總結以下的要點:
- 重寫
equals()
方法,就必須重寫hashCode()
的方法equals()
方法默認是比較對象的地址,使用的是==
等值運算符hashCode()
方法對底層是散列表的對象有提升性能的功能- 同一個對象(如果該對象沒有被修改):那么重復調(diào)用
hashCode()
那么返回的int是相同的!hashCode()
方法默認是由對象的地址轉換而來的equals()
方法還有5個默認的原則:
- 自反性--->調(diào)用
equals()
返回的是true,無論這兩個對象誰調(diào)用equals()
都好,返回的都是true- 一致性--->只要對象沒有被修改,那么多次調(diào)用還是返回對應的結果!
- 傳遞性--->
x.equals(y)
和y.equals(z)
都返回true,那么可以得出:x.equals(z)
返回true- 對稱性--->
x.equals(y)
和y.equals(x)
結果應該是相等的。- 傳入的參數(shù)為null,返回的是false
為啥說hashCode()以散列表為底層帶來性能的提升是很容易理解的。我們再來回顧一下HashMap的插入:
如果hash值都不相等,那么可以直接判斷該key是不相等的了!
toString
toString方法主要是用來標識該對象的
- clone方法用于對象的克隆,一般想要克隆出的對象是獨立的(與原有的對象是分開的)
- 深拷貝指的是該對象的成員變量(如果是可變引用)都應該克隆一份,淺拷貝指的是成員變量沒有被克隆一份
如何克隆對象?
- 克隆的對象要實現(xiàn)Cloneable接口
- 重寫clone方法,最好修飾成public
wait和notify方法其實就是Java給我們提供讓線程之間通信的API。
- 無論是wait、notify還是notifyAll()都需要由監(jiān)聽器對象(鎖對象)來進行調(diào)用
- 簡單來說:他們都是在同步代碼塊中調(diào)用的,否則會拋出異常!
notify()
喚醒的是在等待隊列的某個線程(不確定會喚醒哪個),notifyAll()
喚醒的是等待隊列所有線程- 導致
wait()
的線程被喚醒可以有4種情況
- 該線程被中斷
wait()
時間到了- 被
notify()
喚醒- 被
notifyAll()
喚醒- 調(diào)用
wait()
的線程會釋放掉鎖
為什么wait和notify在Object方法上
- 因為我們的鎖是對象鎖【要是忘記的同學可回顧:Java鎖機制了解一下】,每個對象都可以成為鎖。讓當前線程等待某個對象的鎖,當然應該通過這個對象來操作了
- 鎖對象是任意的,所以這些方法必須定義在Object類中
Thread.sleep()與
Object.wait()
二者都可以暫停當前線程,釋放CPU控制權。
- 主要的區(qū)別在于
Object.wait()
在釋放CPU同時,釋放了對象鎖的控制。- 而
Thread.sleep()
沒有對鎖釋放
但是要注意的是:
notify方法調(diào)用后,被喚醒的線程不會立馬獲得到鎖對象。而是等待notify的synchronized代碼塊執(zhí)行完之后才會獲得鎖對象
finalize()`方法將在垃圾回收器清除對象之前調(diào)用,但該方法不知道何時調(diào)用,具有不定性
一般我們都不會重寫它~
一個對象的finalize()方法只會被調(diào)用一次,而且finalize()被調(diào)用不意味著gc會立即回收該對象,所以有可能調(diào)用finalize()后,該對象又不需要被回收了,然后到了真正要被回收的時候,因為前面調(diào)用過一次,所以不會調(diào)用finalize(),產(chǎn)生問題。
感謝各位的閱讀!看完上述內(nèi)容,你們對java中Object類是什么大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關文章內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文題目:java中Object類是什么
標題路徑:http://www.chinadenli.net/article14/jogsde.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、服務器托管、網(wǎng)站營銷、外貿(mào)建站、微信公眾號、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)