当前位置:主页 > java教程 > Java覆盖finalize()方法详解

Java覆盖finalize()方法代码实例讲解

发布:2019-06-04 12:34:54 144


给大家整理了java实例相关的编程文章,网友梁开琼根据主题投稿了本篇教程内容,涉及到对象覆盖finalize、finalize、源代码、java中finalize方法、java、finalize方法、Java覆盖finalize()方法详解相关内容,已被129网友关注,下面的电子资料对本篇知识点有更加详尽的解释。

Java覆盖finalize()方法详解

本文研究的主要是Java中关于覆盖finalize()方法的一次尝试,具体实现如下。

测试代码

package com.alioo.gc;

/**
 * 执行结果:
 *
 */
public class FinalizeEscapeGC{
  public static FinalizeEscapeGC instance=null;
  public void isAlive(){
    System.out.println("yes,i am still alive");
  }
  @Override
  protected void finalize() throws Throwable {
    super.finalize();
    System.out.println("finalize methode executed");
    instance=this;
  }

  public static void main(String [] args) throws InterruptedException {
    instance=new FinalizeEscapeGC();

    instance=null;
    System.gc();
    Thread.sleep(1000);
    instance.isAlive(); //在没有重写finalize方法时,肯定是会报nullpointerException的

    instance=null;
    System.gc();
    Thread.sleep(1000);
    instance.isAlive();
  }
}

执行结果:

finalize methode executed
yes,i am still alive
Exception in thread "main" java.lang.NullPointerException
at com.alioo.gc.FinalizeEscapeGC.main(FinalizeEscapeGC.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

解释说明:

先执行 instance=null;后执行instance.isAlive(); 在没有重写finalize方法时,肯定是会报nullpointerException的,
但是实际执行结果是一次逃脱成功,一次失败,这是因为任何一个对象的finalize()方法都只会被系统自动调用一次,如果对象面临下一次回收,它的finalize()方法就不会再次执行

总结

这个拯救对象的方式带有极大的不确定性,建议大家不用使用它,忘掉这个方法的存在。

以上就是本文关于Java中覆盖finalize()方法实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


参考资料

相关文章

  • Java Servlet实现表白墙的代码实例

    发布:2023-03-28

    最近用Servlet做了个小项目,分享给大家,下面这篇文章主要给大家介绍了关于Java Servlet实现表白墙的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下


  • Flappy Bird java源代码

    发布:2020-03-13

    这篇文章主要为大家详细介绍了java实现Flappy Bird游戏源代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • SUSE Linux源代码安装MySQL 5.6步骤详解

    发布:2020-03-01

    这篇文章主要介绍了SUSE Linux下源码编译方式安装MySQL 5.6过程分享,本文使用SUSE Linux Enterprise Server 10 SP3 (x86_64)系统,需要的朋友可以参考下


  • 如何对Python编译PyInstaller打包生成的exe文件进行反编译生成pyc、py源代码文件

    发布:2023-03-09

    很多开发者没有发布源程序代码,而是将代码封装为exe可执行文件,这样不仅更有利于程序传播,下面这篇文章主要介绍了如何对Python编译PyInstaller打包生成的exe文件进行反编译生成pyc、py源代码文件的相关资料,需要的朋友可以参考下


  • C语言实现扫雷游戏源代码

    发布:2022-11-07

    给大家整理了关于C语言的教程,这篇文章主要为大家详细介绍了C语言实现扫雷游戏源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


网友讨论