多线程初级问题。

让生命去等候 2018-12-20 02:14:13
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()函数。请前辈指教。谢谢。
...全文
502 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DXF2020 2020-10-09
  • 打赏
  • 举报
回复
你可以试试这个
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();

}


看看结果就懂了
oldmee 2019-01-03
  • 打赏
  • 举报
回复
首先,任何类都是Object的子类,写不写extends Object都是这样。 其次,finalize方法是Object中的用来实现资源清理的方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。 最后,finalize一般使用在使用了JNI(java native interface)的情景下,需要在finalize中调用native方法释放特殊内存,一般情况下不要使用finalize。
lytao123 2018-12-20
  • 打赏
  • 举报
回复
因为你的 Demo 类继承了 Object 类,你编写的 Demo 中的 finalize 是重写了 Object 类中 finalize ,证明方式是在 Demo 类的 finalize方法加注解 @Override ,如果没报错就说明是重写了父类 Object 中 方法,这里你不明白是因为 Java 三大特性中继承你没懂,建议多看点基础的书籍或视频。
MiceRice 2018-12-20
  • 打赏
  • 举报
回复
你这个问题,相当于连Java语言体系里面比较基础的 重写(Override) 概念都不知道啊。。。 建议买点入门书学习下,或者网上看看视频学习吧。

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧