Try finally的一个实验和为什么避免重载 finalize()方法--例子
2017-03-12 09:36 ttylinux 阅读(381) 评论(0) 编辑 收藏 举报public class TryFinallTest { public TryFinallTest(){ } public void runSomething(String str){ System.out.println(str); } public static void typeOne(){ TryFinallTest one = new TryFinallTest(); try{ one.runSomething("runing something"); return; }finally{ one.runSomething("do final work"); } } public static void main(String[] args){ TryFinallTest.typeOne(); } }
输出结果:
runing something
do final work
也就是,只要存在try finally,那么,finally包围的语句块一定会执行。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<<effectiva Java>>中提到,避免使用finalize方法来执行资源清理工作,避免使用finallize方法。
那么,为什么?
例子1:
public class TryCatchFinallyTest implements Runnable { private void testMethod() throws InterruptedException { try { System.out.println("In try block"); throw new NullPointerException(); } catch (NullPointerException npe) { System.out.println("In catch block"); } finally { System.out.println("In finally block"); } } @Override protected void finalize() throws Throwable { System.out.println("In finalize block"); super.finalize(); } @Override public void run() { try { testMethod(); } catch (InterruptedException e) { e.printStackTrace(); } } } //////////////////////////////// public class TestMain2 { @SuppressWarnings("deprecation") public static void main(String[] args) { for (int i = 1; i <= 3; i++) { new Thread(new TryCatchFinallyTest()).start(); } } }
输出结果:
In try block
In try block
In catch block
In finally block
In catch block
In finally block
In try block
In catch block
In finally block
我们是期望,finalize方法会被执行的。但是,finalize方法没有被执行。finalize方法,是在该对象被GC回收的时候,被GC调用执行的,而我们不知道GC什么时候进行垃圾回收。
Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
面对这种,依赖于GC,依赖于GC的回收才执行的方法,除非,你真的有需要,否则,我也觉得,不要使用。
引用:
版权声明:
作者:ttylinux
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步