您好,登錄后才能下訂單哦!
java中Object類是什么?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
Object類有哪些方法
registerNatives()【底層實現、不研究】hashCode()equals(Object obj)clone()toString()notify()notifyAll()wait(long timeout)【還有重載了兩個】finalize()Object一共有11個方法,其中一個為底層的實現registerNatives(),其中兩個wait()和wait(long timeout, int nanos)重載方法。還有一個屬性:返回字節碼文件對象
hashCode
public native int hashCode();
由native方法底層實現了
equals
public boolean equals(Object obj) { return (this == obj); }
直接判斷內存地址了
想要更加清晰它們究竟是做什么的,我們來讀讀它的注釋:
根據注釋我們可以總結以下的要點:
- 重寫
equals()
方法,就必須重寫hashCode()
的方法equals()
方法默認是比較對象的地址,使用的是==
等值運算符hashCode()
方法對底層是散列表的對象有提升性能的功能- 同一個對象(如果該對象沒有被修改):那么重復調用
hashCode()
那么返回的int是相同的!hashCode()
方法默認是由對象的地址轉換而來的equals()
方法還有5個默認的原則:
- 自反性--->調用
equals()
返回的是true,無論這兩個對象誰調用equals()
都好,返回的都是true- 一致性--->只要對象沒有被修改,那么多次調用還是返回對應的結果!
- 傳遞性--->
x.equals(y)
和y.equals(z)
都返回true,那么可以得出:x.equals(z)
返回true- 對稱性--->
x.equals(y)
和y.equals(x)
結果應該是相等的。- 傳入的參數為null,返回的是false
為啥說hashCode()以散列表為底層帶來性能的提升是很容易理解的。我們再來回顧一下HashMap的插入:
如果hash值都不相等,那么可以直接判斷該key是不相等的了!
toString
toString方法主要是用來標識該對象的
- clone方法用于對象的克隆,一般想要克隆出的對象是獨立的(與原有的對象是分開的)
- 深拷貝指的是該對象的成員變量(如果是可變引用)都應該克隆一份,淺拷貝指的是成員變量沒有被克隆一份
如何克隆對象?
- 克隆的對象要實現Cloneable接口
- 重寫clone方法,最好修飾成public
wait和notify方法其實就是Java給我們提供讓線程之間通信的API。
- 無論是wait、notify還是notifyAll()都需要由監聽器對象(鎖對象)來進行調用
- 簡單來說:他們都是在同步代碼塊中調用的,否則會拋出異常!
notify()
喚醒的是在等待隊列的某個線程(不確定會喚醒哪個),notifyAll()
喚醒的是等待隊列所有線程- 導致
wait()
的線程被喚醒可以有4種情況
- 該線程被中斷
wait()
時間到了- 被
notify()
喚醒- 被
notifyAll()
喚醒- 調用
wait()
的線程會釋放掉鎖
為什么wait和notify在Object方法上
- 因為我們的鎖是對象鎖【要是忘記的同學可回顧:Java鎖機制了解一下】,每個對象都可以成為鎖。讓當前線程等待某個對象的鎖,當然應該通過這個對象來操作了
- 鎖對象是任意的,所以這些方法必須定義在Object類中
Thread.sleep()與
Object.wait()
二者都可以暫停當前線程,釋放CPU控制權。
- 主要的區別在于
Object.wait()
在釋放CPU同時,釋放了對象鎖的控制。- 而
Thread.sleep()
沒有對鎖釋放
但是要注意的是:
notify方法調用后,被喚醒的線程不會立馬獲得到鎖對象。而是等待notify的synchronized代碼塊執行完之后才會獲得鎖對象
finalize()`方法將在垃圾回收器清除對象之前調用,但該方法不知道何時調用,具有不定性
一般我們都不會重寫它~
一個對象的finalize()方法只會被調用一次,而且finalize()被調用不意味著gc會立即回收該對象,所以有可能調用finalize()后,該對象又不需要被回收了,然后到了真正要被回收的時候,因為前面調用過一次,所以不會調用finalize(),產生問題。
感謝各位的閱讀!看完上述內容,你們對java中Object類是什么大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。