当前位置:七道奇文章资讯编程技术Java编程
日期: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");
    }
  }
} ///:~

该程序的输出展示了具体发生的事情:
Entering first try block
Entering second try block
finally in 2nd try block
Caught Ex in first try block
finally in 1st try block
若调用了break和continue语句,finally语句也会得以履行.请注意,与作上标签的break和continue一道,finally解除了Java对goto跳转语句的需求.
  以上是“<b>用finally做什么</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .