Object類別的深入解析(圖文)
這篇文章帶給大家的內容是關於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();
public boolean equals(Object obj) { return (this == obj); }
#重寫
為啥說hashCode()以散列表為底層帶來效能的提升是很容易理解的。我們再來回顧一下HashMap的插入:- 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)
傳入的參數為null,回傳的是false和
y.equals(x)結果應該是相等的。
如果hash值都不相等,那麼可以直接判斷該key是不相等的了!
標識該物件的
wait & notify & notifyAllwait和notify方法其實就是Java給我們提供讓clone方法用於物件的克隆,一般想要克隆出的物件是
- 獨立的(與原有的物件是分開的)
深拷貝指的是該物件的成員變數(如果是可變引用)都應該克隆一份,淺拷貝指的是成員變數沒有被複製一份- 如何複製物件?
複製的物件要
- 實作Cloneable介面
- #重寫clone方法,最好修飾成public
線程之間通訊的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(),產生問題。
以上是Object類別的深入解析(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。
