面向对象回顾(静态变量、类加载机制/双亲委派模型、Object类的方法、类和对象区别)
1.?靜態(tài)變量存在什么位置?
方法區(qū)
2.?類加載機制,雙親委派模型,好處是什么?
某個特定的類加載器在接到加載類的請求時,首先將加載任務(wù)委托給父類加載器,依次遞歸,如果父類加載器可以完成類加載任務(wù),就成功返回;只有父類加載器無法完成此加載任務(wù)時,才自己去加載。
使用雙親委派模型的好處在于Java類隨著它的類加載器一起具備了一種帶有優(yōu)先級的層次關(guān)系。
- 例如類java.lang.Object,它存在在rt.jar中,
- 無論哪一個類加載器要加載這個類,最終都是委派給處于模型最頂端的Bootstrap ClassLoader進行加載,
- 因此Object類在程序的各種類加載器環(huán)境中都是同一個類。
- 相反,如果沒有雙親委派模型而是由各個類加載器自行加載的話,如果用戶編寫了一個java.lang.Object的同名類并放在ClassPath中,那系統(tǒng)中將會出現(xiàn)多個不同的Object類,程序?qū)⒒靵y。
- 因此,如果開發(fā)者嘗試編寫一個與rt.jar類庫中重名的Java類,可以正常編譯,但是永遠無法被加載運行。
3.?Object類的方法并簡要說明
Object()默認構(gòu)造方法。
clone() 創(chuàng)建并返回此對象的一個副本。
equals(Object obj) 指示某個其他對象是否與此對象“相等”。
finalize()當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調(diào)用此方法。
getClass()返回一個對象的運行時類。
hashCode()返回該對象的哈希碼值。
notify()喚醒在此對象監(jiān)視器上等待的單個線程。
notifyAll()喚醒在此對象監(jiān)視器上等待的所有線程。
toString()返回該對象的字符串表示。
wait()導(dǎo)致當前的線程等待,直到其他線程調(diào)用此對象的 notify() 方法或 notifyAll() 方法。
wait(long timeout)導(dǎo)致當前的線程等待,直到其他線程調(diào)用此對象的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量。
wait(long timeout, int nanos) 導(dǎo)致當前的線程等待,直到其他線程調(diào)用此對象的 notify() 方法或 notifyAll() 方法,或者其他某個線程中斷當前線程,或者已超過某個實際時間量。
3.1?wait方法的底層原理
ObjectSynchronizer::wait方法通過object的對象中找到ObjectMonitor對象調(diào)用方法 void ObjectMonitor::wait(jlong millis, bool interruptible, TRAPS)
通過ObjectMonitor::AddWaiter調(diào)用把新建立的ObjectWaiter對象放入到 _WaitSet 的隊列的末尾中然后在ObjectMonitor::exit釋放鎖,接著 thread_ParkEvent->park 也就是wait。
4.?類和對象的區(qū)別
1.類是對某一類事物的描述,是抽象的;而對象是一個實實在在的個體,是類的一個實例。
比如:“人”是一個類,而“教師”則是“人”的一個實例。
2.對象是函數(shù)、變量的集合體;而類是一組函數(shù)和變量的集合體,即類是一組具有相同屬性的對象集合體。
總結(jié)
以上是生活随笔為你收集整理的面向对象回顾(静态变量、类加载机制/双亲委派模型、Object类的方法、类和对象区别)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象回顾(异常(try、catch、
- 下一篇: 集合对比