class Demo extends Object
{
public void finalize()
{
System.out.println("垃圾回收器運行一次");
}
}
class ThreadDemo
{
public static void main(String[] args)
{
new Demo();
new Demo();
new Demo();
System.gc();
System.out.println("hello world! ");
}
}
不太懂為什么System.gc()會呼叫Demo類里面的這個finalize()函式,而不是object類里的finalize()函式。請前輩指教。謝謝。
uj5u.com熱心網友回復:
你這個問題,相當于連Java語言體系里面比較基礎的 重寫(Override) 概念都不知道啊。。。建議買點入門書學習下,或者網上看看視頻學習吧。
uj5u.com熱心網友回復:
因為你的 Demo 類繼承了 Object 類,你撰寫的 Demo 中的 finalize 是重寫了 Object 類中 finalize ,證明方式是在 Demo 類的 finalize方法加注解 @Override ,如果沒報錯就說明是重寫了父類 Object 中 方法,這里你不明白是因為 Java 三大特性中繼承你沒懂,建議多看點基礎的書籍或視頻。uj5u.com熱心網友回復:
首先,任何類都是Object的子類,寫不寫extends Object都是這樣。其次,finalize方法是Object中的用來實作資源清理的方法,子類可以覆寫該方法以實作資源清理作業,GC在回收物件之前呼叫該方法。
最后,finalize一般使用在使用了JNI(java native interface)的情景下,需要在finalize中呼叫native方法釋放特殊記憶體,一般情況下不要使用finalize。
uj5u.com熱心網友回復:
你可以試試這個public class A{
public void print(){
sout("A");
}
}
public class B extends A{
public void print(){
sout("B");
}
}
main(){
A a = new A();
a.print();
A b = new B();
b.print();
}
看看結果就懂了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/165222.html
標籤:J2ME
上一篇:關于集中式LB和行程內LB區別
下一篇:元素放入HashMap的原理?元素放入HashSet的實作原理? HashMap和Hashtable有什么區別?
