? ? ? 一、 hashcode()方法是個(gè)native方法,返回該對(duì)象的哈希碼,涉及到計(jì)算哈希碼的數(shù)據(jù)結(jié)構(gòu)都會(huì)用到此方法,如HashMap,HashSet,HashTable
hashcode方法設(shè)計(jì)的三個(gè)協(xié)定:
1、同一個(gè)對(duì)象(“不變”)多次hashcode的值是一樣的
2、不同的對(duì)象,hashcode的值不一樣
3、equals為false的兩個(gè)對(duì)象的hashcode返回值可能相等,我們重寫hashcode的時(shí)候,盡量要使這兩個(gè)對(duì)象的hashcode值不等
? ? ? ?二、 equals()方法的原始實(shí)現(xiàn)是比較兩個(gè)對(duì)象的地址,equals方法的協(xié)定:
1、任何非空對(duì)象x滿足x.equals(x)返回true
2、對(duì)稱性
3、傳遞性
4、一致性:參與equals計(jì)算的信息沒有更改,那么每次equals返回的結(jié)果不變
5、非空的x,x.equals(null)返回false
重寫hashcode和equals的時(shí)候特別注意它們的協(xié)定
? ? 三、getClass()方法返回的是類運(yùn)行時(shí)的對(duì)象
如:class A extend? class B
B b = new B();
b.super().getClass()返回的也是B類對(duì)象
四、wait和notify
else:獲取鎖和擁有鎖對(duì)象的監(jiān)視器是一個(gè)概念
/**wait()方法是Object的成員方法,在調(diào)用wait方法后,持有對(duì)象鎖的當(dāng)前線程將釋放鎖,并掛起,? ? ?*直到下次被notify()或者notifyAll,它才會(huì)重新嘗試獲取鎖,
? ?*那么當(dāng)它沒有獲取到鎖的時(shí)候,它還是會(huì)阻塞在當(dāng)前位置。
? ?*注意:1、wait方法的調(diào)用要在同步方法或者代碼塊中
? ? ? 2、調(diào)用wait方法的一定是鎖對(duì)象
? ? ? 3、判斷條件要用while語(yǔ)法,因?yàn)楫?dāng)線程被喚醒后,它會(huì)重新走while循環(huán),如果用if就會(huì)有問題(多個(gè)線程等待被喚醒后,都會(huì)從等待處往下執(zhí)行)
? ? ? 4、notify的調(diào)用同wait調(diào)用方式一樣,但是notify調(diào)用后它不會(huì)立式釋放鎖,要等同步方法或代碼塊執(zhí)行完才會(huì)釋放鎖
? ? ? 5、notify會(huì)隨機(jī)喚醒等待的線程(同一個(gè)對(duì)象鎖調(diào)用的wait
*/

五、finalize()方法是一個(gè)protect修飾的普通方法,當(dāng)JVM在進(jìn)行垃圾回收拾時(shí),被回收的對(duì)象,就是調(diào)用該對(duì)象集成自O(shè)bject的finalize方法,可以通過重寫該方法來打印一些對(duì)項(xiàng)目有意義的日志,或者其它的操作

六、wait(Long timeout)
用法同wait()方法,當(dāng)在timeout之前沒有被喚醒,則自動(dòng)喚醒,然后在等待出繼續(xù)執(zhí)行
七、wait(long timeout,int nanos)
nanos為一個(gè)毫微妙時(shí)間,看下源碼吧

八、registerNatives()是個(gè)靜態(tài)方法
就是對(duì)幾個(gè)本地方法進(jìn)行注冊(cè)(也就是初始化java方法映射到C的方法)
九、toString(),上源碼(全類名+@+對(duì)象的哈希碼取16進(jìn)制)

????????一般建議子類重寫toString方法,這樣可以打印一些有意義的東西,個(gè)人覺得toString方法特
? ? ? ? 別好用,特別是在表示一個(gè)對(duì)象的時(shí)候