亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中Object類是什么

發布時間:2020-10-27 11:20:29 來源:億速云 閱讀:199 作者:小新 欄目:編程語言

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);
}

直接判斷內存地址了

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

java中Object類是什么

java中Object類是什么

根據注釋我們可以總結以下的要點:

  • 重寫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的插入:

java中Object類是什么

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

toString

toString方法主要是用來標識該對象的

java中Object類是什么

clone

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

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

wait & notify & notifyAll

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()方法只會被調用一次,而且finalize()被調用不意味著gc會立即回收該對象,所以有可能調用finalize()后,該對象又不需要被回收了,然后到了真正要被回收的時候,因為前面調用過一次,所以不會調用finalize(),產生問題。

java中Object類是什么

感謝各位的閱讀!看完上述內容,你們對java中Object類是什么大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰城市| 荥阳市| 长顺县| 四会市| 东台市| 柘荣县| 马山县| 九龙县| 金门县| 晋中市| 延津县| 体育| 岫岩| 松原市| 澄江县| 长阳| 灯塔市| 华容县| 永德县| 娄烦县| 章丘市| 百色市| 凤凰县| 永仁县| 贵定县| 崇文区| 运城市| 邢台县| 江口县| 奉节县| 光泽县| 平陆县| 西城区| 安化县| 浮梁县| 新巴尔虎左旗| 镇沅| 新蔡县| 密山市| 深圳市| 巴青县|