Java 對象相關面試題
Java 對象生命周期
- 建立階段
- 為對象配置設定存儲空間
- 開始構造對象
- 從超類到子類對static成員進行初始化
- 超類成員變量按順序初始化,遞歸調用超類的構造方法
- 子類成員變量按順序初始化,子類構造方法調用
- 應用階段
對象至少被一個強引用持有
-
不可建階段
當一個對象處于不可見階段時,說明程式本身不再持有該對象的任何強引用,雖然該這些引用仍然是存在着的。簡單說就是程式的執行已經超出了該對象的作用域了。
boolean bool = false;
if(bool == true){
int count = 0;
count++;
}
System.out.print count
- 不可達階段
對象處于不可達階段是指該對象不再被任何強引用所持有。
-
收集階段
當垃圾回收器發現該對象已經處于“不可達階段”并且垃圾回收器已經對該對象的記憶體空間重新配置設定做好準備時,則對象進入了“收集階段”。如果該對象已經重寫了finalize()方法,則會去執行該方法的終端操作。
- 終結階段
當對象執行完finalize()方法後仍然處于不可達狀态時,則該對象進入終結階段。在該階段是等待垃圾回收器對該對象空間進行回收。
-
Object 中有哪些方法
- Class<?> getClass()傳回此 Object 的運作時類。
- Object clone()建立并傳回此對bai象du的一個副本。
- boolean equals(Object obj)訓示其他某個對象是否與此對象“相等”。
- protected void finalize()當垃圾回收器确定bai不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。
- int hashCode()傳回該對象的哈希碼值。
- void notify()喚醒在此對象螢幕上等待的單個線程。
- void notifyAll()喚醒在此對象螢幕上等待的所有線程。
- String toString()傳回該對象的字元串表示
- void wait()在其他線程調用此對象的 notify() 方法或 notifyAll() 方法前,導緻目前線程等待。
- void wait(long timeout)在其他線程調用此對象的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量前,導緻目前線程等待。
- void wait(long timeout, int nanos)在其他線程調用此對象的 notify() 方法或 notifyAll() 方法,或者其他某個線程中斷目前線程,或者已超過某個實際時間量前,導緻目前線程等待。