面試官:問點基礎,說說Object類下面有幾種方法呢?

今天說一道基礎題型,不過很多人會忽略或者至少說不完整,但是面試時被問到的機率還是很大的。

面試題

Object有幾種方法呢?

  • Java語言是一種單繼承結構語言,Java中所有的類都有一個共同的祖先。這個祖先就是Object類。

  • 如果一個類沒有用extends明確指出繼承於某個類,那麼它默認繼承Object類。

  • Object的方法我們在平時基本都會用到,但如果沒有準備被忽然這麼一問,還是有點懵圈的。

分析

Object類是Java中所有類的基類。位於java.lang包中,一共有13個方法。如下圖:


具體解答

1.Object()
這個沒什麼可說的,Object類的構造方法。(非重點)

2.registerNatives()
爲了使JVM發現本機功能,他們被一定的方式命名。例如,對於java.lang.Object.registerNatives,對應的C函數命名爲Java_java_lang_Object_registerNatives。

通過使用registerNatives(或者更確切地說,JNI函數RegisterNatives),可以命名任何你想要你的C函數。(非重點)

3.clone()
clone()函數的用途是用來另存一個當前存在的對象。只有實現了Cloneable接口才可以調用該方法,否則拋出CloneNotSupportedException異常。(注意:回答這裏時可能會引出設計模式的提問)

4.getClass()
final方法,用於獲得運行時的類型。該方法返回的是此Object對象的類對象/運行時類對象Class。效果與Object.class相同。(注意:回答這裏時可能會引出類加載,反射等知識點的提問)

5.equals()
equals用來比較兩個對象的內容是否相等。默認情況下(繼承自Object類),equals和==是一樣的,除非被覆寫(override)了。(注意:這裏可能引出更常問的“equals與==的區別”及hashmap實現原理的提問)

6.hashCode()
該方法用來返回其所在對象的物理地址(哈希碼值),常會和equals方法同時重寫,確保相等的兩個對象擁有相等的hashCode。(同樣,可能引出hashmap實現原理的提問)

7.toString()
toString()方法返回該對象的字符串表示,這個方法沒什麼可說的。

8.wait()
導致當前的線程等待,直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法。(引出線程通信及“wait和sleep的區別”的提問)

9.wait(long timeout)
導致當前的線程等待,直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量。(引出線程通信及“wait和sleep的區別”的提問)

10.wait(long timeout, int nanos)
導致當前的線程等待,直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法,或者其他某個線程中斷當前線程,或者已超過某個實際時間量。(引出線程通信及“wait和sleep的區別”的提問)

11.notify()
喚醒在此對象監視器上等待的單個線程。(引出線程通信的提問)

12.notifyAll()
喚醒在此對象監視器上等待的所有線程。(引出線程通信的提問)

13.finalize()
當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。(非重點,但小心引出垃圾回收的提問)

引申常見問題

  • equals() 與 == 的區別是什麼?

  • hashCode() 和 equals() 之間有什麼聯繫?

  • wait()方法與sleep()方法的區別

  • 爲什麼重寫了equals就必須重寫hashCode

  • HashMap的實現原理

  • 談談類加載機制

後續我們就這些常見問題一一做一些解答,當然,可能大部分人對這類問了八百遍的問題已經倒背如流了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章