日期:2011-03-22 16:17:00 来源:本站整理
<b>用finally做什么</b>[Java编程]
本文“<b>用finally做什么</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在没有“垃圾汇集”以及“自动调用破坏器”机制的一种语言中(注释⑤),finally显得分外重要,因为程序员可用它担保内存的精确释放——无论在try块内部发生了什么情况.但Java供应了垃圾汇集机制,所以内存的释放几近绝对不会成为问题.别的,它也没有构建器可供调用.既然如此,Java里什么时刻才会用到finally呢?
⑤:“破坏器”(Destructor)是“构建器”(Constructor)的反义词.它代表一个特别的函数,一旦某个对象失去用处,普通就会调用它.我们必定知道在那边以及什么时刻调用破坏器.C++供应了自动的破坏器调用机制,但Delphi的Object Pascal版本1及2却不具有这一本领(在这种语言中,破坏器的含义与用法都发生了改变).
除将内存设回原始状况以外,若要设置另一些东西,finally就是必须的.比方,我们有时需求翻开一个文件大概成立一个网络衔接,大概在屏幕上画一些东西,乃至设置外部世界的一个开关,等等.以下例所示:
//: OnOffSwitch.java // Why use finally? class Switch { boolean state = false; boolean read() { return state; } void on() { state = true; } void off() { state = false; } } public class OnOffSwitch { static Switch sw = new Switch(); public static void main(String[] args) { try { sw.on(); // Code that can throw exceptions... sw.off(); } catch(NullPointerException e) { System.out.println("NullPointerException"); sw.off(); } catch(IllegalArgumentException e) { System.out.println("IOException"); sw.off(); } } } ///:~
这里的目标是保证main()完成时开关处于关闭状况,所以将sw.off()置于try块以及每个违例掌握器的末尾.但产生的一个违例有大概不是在这里捕捉的,这便会错过sw.off().但是,操纵finally,我们可以将来自try块的关闭代码只置于一个地方:
//: WithFinally.java // Finally Guarantees cleanup class Switch2 { boolean state = false; boolean read() { return state; } void on() { state = true; } void off() { state = false; } } public class WithFinally { static Switch2 sw = new Switch2(); public static void main(String[] args) { try { sw.on(); // Code that can throw exceptions... } catch(NullPointerException e) { System.out.println("NullPointerException"); } catch(IllegalArgumentException e) { System.out.println("IOException"); } finally { sw.off(); } } } ///:~
在这儿,sw.off()已移至一个地方.无论发生什么事情,都必定会运行它.
即便违例不在当前的catch从句集里捕捉,finally城市在违例掌握机制转到更高级别搜索一个掌握器之前得以履行.以下所示:
//: AlwaysFinally.java // Finally is always executed class Ex extends Exception {} public class AlwaysFinally { public static void main(String[] args) { System.out.println( "Entering first try block"); try { System.out.println( "Entering second try block"); try { throw new Ex(); } finally { System.out.println( "finally in 2nd try block"); } } catch(Ex e) { System.out.println( "Caught Ex in first try block"); } finally { System.out.println( "finally in 1st try block"); } } } ///:~
该程序的输出展示了具体发生的事情:
若调用了break和continue语句,finally语句也会得以履行.请注意,与作上标签的break和continue一道,finally解除了Java对goto跳转语句的需求.Entering first try block Entering second try block finally in 2nd try block Caught Ex in first try block finally in 1st try block
以上是“<b>用finally做什么</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论