返回介绍

9.6 用 finally 清除

发布于 2024-10-15 23:56:22 字数 1364 浏览 0 评论 0 收藏 0

无论一个违例是否在 try 块中发生,我们经常都想执行一些特定的代码。对一些特定的操作,经常都会遇到这种情况,但在恢复内存时一般都不需要(因为垃圾收集器会自动照料一切)。为达到这个目的,可在所有违例控制器的末尾使用一个 finally 从句(注释④)。所以完整的违例控制小节象下面这个样子:

try {

// 要保卫的区域:

// 可能“掷”出 A,B,或 C 的危险情况

} catch (A a1) {

// 控制器 A

} catch (B b1) {

// 控制器 B

} catch (C c1) {

// 控制器 C

} finally {

// 每次都会发生的情况

}

④:C++违例控制未提供 finally 从句,因为它依赖构建器来达到这种清除效果。

为演示 finally 从句,请试验下面这个程序:

//: FinallyWorks.java
// The finally clause is always executed

public class FinallyWorks {
  static int count = 0;
  public static void main(String[] args) {
    while(true) {
      try {
        // post-increment is zero first time:
        if(count++ == 0)
          throw new Exception();
        System.out.println("No exception");
      } catch(Exception e) {
        System.out.println("Exception thrown");
      } finally {
        System.out.println("in finally clause");
        if(count == 2) break; // out of "while"
      }
    }
  }
} ///:~

通过该程序,我们亦可知道如何应付 Java 违例(类似 C++的违例)不允许我们恢复至违例产生地方的这一事实。若将自己的 try 块置入一个循环内,就可建立一个条件,它必须在继续程序之前满足。亦可添加一个 static 计数器或者另一些设备,允许循环在放弃以前尝试数种不同的方法。这样一来,我们的程序可以变得更加“健壮”。

输出如下:

Exception thrown
in finally clause
No exception
in finally clause

无论是否“掷”出一个违例,finally 从句都会执行。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文