第一百一十六节 Java 面向对象设计 - Java 终止块

Java 面向对象设计 - Java 终止块

try ​块也可以有零个或一个​ finally​ 块。 ​finally ​块总是与 ​try ​块一起使用。

语法

使用 ​finally​ 块的语法是

复制代码
finally  {
    // Code for finally block 
}

finally​ 块以关键字 ​finally​ 开始,后面紧跟一对大括号。

finally​ 块的代码放在大括号内。

try​,​catch​ 和​ finally​ 块有两种可能的组合:​try - catch - finally​或​try - finally​。

try ​块可以后跟零个或多个​ catch​ 块。

try​ 块最多可以有一个 ​finally​ 块。

try​ 块必须有一个​ catch​ 块,一个 ​finally​ 块,或者两者兼而有之。

try-catch-finally​ 块的语法是:

复制代码
try  {
    // Code for try block
}
catch(Exception1 e1)  {
    // Code for catch block
}
finally  {
    // Code for finally block
}

try - finally ​块的语法是:

复制代码
try  {
    // Code for try block
}
finally  {
    // Code for finally block
}

无论在相关联的​try​和 ​/​ 或 ​catch​ 块中发生什么,​finally ​块都被保证被执行。

通常,我们使用 ​finally​ 块来写清理代码。

例如,我们可能获得一些资源,当我们完成它们时,必须释放。

try - finally​ 块允许你实现这个逻辑。

您的代码结构将如下所示:

复制代码
try  {
    // Obtain   and  use  some resources here
}
finally  {
    // Release the   resources that were  obtained in the   try  block
}

例子

下面的代码演示了​finally​块的使用。

复制代码
public class Main {
  public static void main(String[] args) {
    int x = 10, y = 0, z = 0;
    try {
      System.out.println("Before dividing x  by  y.");
      z = x / y;
      System.out.println("After dividing x  by  y.");
    } catch (ArithmeticException e) {
      System.out.println("Inside  catch block a.");
    } finally {
      System.out.println("Inside finally  block a.");
    }

    try {
      System.out.println("Before setting  z  to 2.");
      z = 2;
      System.out.println("After setting  z  to 2.");
    }
    catch (Exception e) {
      System.out.println("Inside  catch block b.");
    } finally {
      System.out.println("Inside finally  block b.");
    }
    try {
      System.out.println("Inside try block c.");
    }
    finally {
      System.out.println("Inside finally  block c.");
    }

    try {
      System.out.println("Before  executing System.exit().");
      System.exit(0);
      System.out.println("After  executing System.exit().");

    } finally {
      // This finally block will not be executed
      // because application exits in try block
      System.out.println("Inside finally  block d.");
    }
  }
}

上面的代码生成以下结果。

重新引用异常

捕获的异常可以重新引用。

复制代码
public class Main {
  public static void main(String[] args) {
    try {
      m1();
    } catch (MyException e) {
      // Print the stack trace 
      e.printStackTrace();
    }
  }

  public static void m1() throws MyException {
    try {
      m2();
    } catch (MyException e) {
      e.fillInStackTrace();
      throw e;
    }
  }

  public static void m2() throws MyException {
    throw new MyException("An  error has  occurred.");
  }
}

class MyException extends Exception {
  public MyException() {
    super();
  }

  public MyException(String message) {
    super(message);
  }

  public MyException(String message, Throwable cause) {
    super(message, cause);
  }

  public MyException(Throwable cause) {
    super(cause);
  }
}

上面的代码生成以下结果。

相关推荐
道可到2 小时前
Java 反射现代实践速查表(JDK 11+/17+)
java
侃侃_天下3 小时前
最终的信号类
开发语言·c++·算法
道可到3 小时前
Java 反射现代实践指南(JDK 11+ / 17+ 适用)
java
玉衡子3 小时前
九、MySQL配置参数优化总结
java·mysql
叽哥3 小时前
Kotlin学习第 8 课:Kotlin 进阶特性:简化代码与提升效率
android·java·kotlin
麦兜*3 小时前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
带刺的坐椅3 小时前
DamiBus v1.1.0 发布(给单体多模块解耦)
java·事件总线·damibus
葡萄城技术团队3 小时前
用 Java 构建健壮 REST API 的 4 个关键技巧
java
杨杨杨大侠3 小时前
解密 atlas-mapper 框架 (9/10):故障排查与调试技巧
java·开源·github
Slaughter信仰3 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库