【作者前言】:13年入圈屈呕,分享些本人工作中遇到的點(diǎn)點(diǎn)滴滴那些事兒,17年剛開始寫博客,高手勿噴蝎宇!以分享交流為主弟劲,歡迎各路豪杰點(diǎn)評(píng)改進(jìn)!
[1]
??知識(shí)點(diǎn)內(nèi)容
??1. Object [2]
Object
類是Java語(yǔ)言中所有類的根
姥芥,所有的類都直接或間接的繼承了Object類
兔乞;
數(shù)組
也繼承了Object類;
Object類中定義了11個(gè)方法
撇眯,任何類都默認(rèn)擁有
(包括數(shù)組)报嵌,可以使用API文檔查詢;
學(xué)幾個(gè)主要的如下
??2. Object --- equals [3]
Object類中定義了equals方法【 public boolean equals(Object obj) 】熊榛,用來(lái)
比較兩個(gè)對(duì)象的虛地址
锚国,如果虛地址相同
則返回true
,否則返回false玄坦;
Object類中的equals方法的作用血筑,與==
相同,都是比較兩個(gè)對(duì)象的虛地址
煎楣;
很多類覆蓋了equals方法豺总,用來(lái)比較兩個(gè)對(duì)象的屬性值,如果屬性值相同择懂,則認(rèn)為兩個(gè)對(duì)象相等喻喳;例如,String類就覆蓋了equlas方法困曙,用來(lái)比較兩個(gè)字符串的字符序列值
??3. Object --- hashCode [4]
Object類中定義了hashCode方法【 public int hashCode() 】表伦,用來(lái)
返回對(duì)象的哈希碼
;
hashCode方法主要為了配合基于哈希的集合類一起工作
慷丽,例如HashSet蹦哼、HashMap等【集合章節(jié)學(xué)習(xí)】;
默認(rèn)情況下【即沒(méi)有重新hashCode方法時(shí)】要糊,當(dāng)兩個(gè)引用的虛地址相同時(shí)纲熏,hashCode返回相同的值,否則返回不同的值锄俄;
??4. Object --- finalize [5]
Java和C++不同局劲,沒(méi)有提供析構(gòu)方法
Object中包含了一個(gè)叫做finalize()的方法
,提供在對(duì)象被回收時(shí)調(diào)用以釋放資源
珊膜,默認(rèn)情況下其不執(zhí)行任何動(dòng)作
由于Object是Java繼承體系的根容握,因此事實(shí)上所有的Java類都具備finalize方法
當(dāng)垃圾回收器確定了一個(gè)對(duì)象沒(méi)有任何引用時(shí),其會(huì)調(diào)用finalize()方法车柠。但是剔氏,finalize方法并不保證調(diào)用時(shí)機(jī)塑猖,因此也不建議重寫finalize()方法
每個(gè)對(duì)象只能被GC自動(dòng)調(diào)用finalize( )方法一次
。如果在finalize( )方法執(zhí)行時(shí)產(chǎn)生異常(exception)谈跛,則該對(duì)象仍可以被垃圾收集器收集
Java語(yǔ)言允許程序員為任何方法添加finalize( )方法羊苟,該方法會(huì)在垃圾收集器交換回收對(duì)象之前被調(diào)用。但不要過(guò)分依賴該方法對(duì)系統(tǒng)資源進(jìn)行回收和再利用感憾,因?yàn)樵摲椒ㄕ{(diào)用后的執(zhí)行結(jié)果是不可預(yù)知的
當(dāng)finalize( )方法尚未被調(diào)用時(shí)蜡励,System. runFinalization( )方法可以用來(lái)調(diào)用finalize( )方法,并實(shí)現(xiàn)相同的效果阻桅,對(duì)無(wú)用對(duì)象進(jìn)行垃圾收集
如果必須要重寫finalize()方法凉倚,請(qǐng)記住使用super.finalize()調(diào)用父類的清除方法,否則對(duì)象清理的過(guò)程可能不完整