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


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

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

    语法

    使用 ​finally​ 块的语法是

    1. finally {
    2. // Code for finally block
    3. }

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

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

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

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

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

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

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

    1. try {
    2. // Code for try block
    3. }
    4. catch(Exception1 e1) {
    5. // Code for catch block
    6. }
    7. finally {
    8. // Code for finally block
    9. }

    try - finally ​块的语法是:

    1. try {
    2. // Code for try block
    3. }
    4. finally {
    5. // Code for finally block
    6. }

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

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

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

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

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

    1. try {
    2. // Obtain and use some resources here
    3. }
    4. finally {
    5. // Release the resources that were obtained in the try block
    6. }

    例子

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

    1. public class Main {
    2. public static void main(String[] args) {
    3. int x = 10, y = 0, z = 0;
    4. try {
    5. System.out.println("Before dividing x by y.");
    6. z = x / y;
    7. System.out.println("After dividing x by y.");
    8. } catch (ArithmeticException e) {
    9. System.out.println("Inside catch block a.");
    10. } finally {
    11. System.out.println("Inside finally block a.");
    12. }
    13. try {
    14. System.out.println("Before setting z to 2.");
    15. z = 2;
    16. System.out.println("After setting z to 2.");
    17. }
    18. catch (Exception e) {
    19. System.out.println("Inside catch block b.");
    20. } finally {
    21. System.out.println("Inside finally block b.");
    22. }
    23. try {
    24. System.out.println("Inside try block c.");
    25. }
    26. finally {
    27. System.out.println("Inside finally block c.");
    28. }
    29. try {
    30. System.out.println("Before executing System.exit().");
    31. System.exit(0);
    32. System.out.println("After executing System.exit().");
    33. } finally {
    34. // This finally block will not be executed
    35. // because application exits in try block
    36. System.out.println("Inside finally block d.");
    37. }
    38. }
    39. }

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

    重新引用异常

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

    1. public class Main {
    2. public static void main(String[] args) {
    3. try {
    4. m1();
    5. } catch (MyException e) {
    6. // Print the stack trace
    7. e.printStackTrace();
    8. }
    9. }
    10. public static void m1() throws MyException {
    11. try {
    12. m2();
    13. } catch (MyException e) {
    14. e.fillInStackTrace();
    15. throw e;
    16. }
    17. }
    18. public static void m2() throws MyException {
    19. throw new MyException("An error has occurred.");
    20. }
    21. }
    22. class MyException extends Exception {
    23. public MyException() {
    24. super();
    25. }
    26. public MyException(String message) {
    27. super(message);
    28. }
    29. public MyException(String message, Throwable cause) {
    30. super(message, cause);
    31. }
    32. public MyException(Throwable cause) {
    33. super(cause);
    34. }
    35. }

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

  • 相关阅读:
    前端项目继承,在A项目中继承base项目,使用vue2
    SpringCloud-Sentinel
    ArcGIS Engine:视图菜单的创建和鹰眼图的实现
    使用C语言实现散列表中的冲突处理方法
    做金蝶BI数据分析?后悔没早遇到这套方案
    Python之字符串格式化
    349. 两个数组的交集【力扣】
    Spring整合Mybatis
    RK3568开发笔记(八):开发板烧写buildroot固件(支持hdmi屏),搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo测试
    【ArcGIS】统计格网中不同土地利用类型占比
  • 原文地址:https://blog.csdn.net/2301_78772942/article/details/139832286