当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向。依赖于方法是怎样编码的,异常甚至可以导致方法过早返回。这在一些方法中是一个问题。例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文件的代码被异常处理机制旁路。finally关键字为处理这种意外而设计。

finally创建一个代码块。该代码块在一个try/catch 块完成之后另一个try/catch出现之前执行。finally块无论有没有异常抛出都会执行。如果异常被抛出,finally甚至是在没有与该异常相匹配的catch子句情况下也将执行。一个方法将从一个try/catch块返回到调用程序的任何时候,经过一个未捕获的异常或者是一个明确的返回语句,finally子句在方法返回之前仍将执行。这在关闭文件句柄和释放任何在方法开始时被分配的其他资源是很有用的。finally子句是可选项,可以有也可以无。然而每一个try语句至少需要一个catch或finally子句。

下面的例子显示了3种不同的退出方法。每一个都执行了finally子句:
// Demonstrate finally.
class FinallyDemo {
    // Through an exception out of the method.
    static void procA() {
        try {
           System.out.println("inside procA");
           throw new RuntimeException("demo");
        } finally {
           System.out.println("procA's finally");
        }
    }

// Return from within a try block. http://www.baqist.cn/
    static void procB() {
        try {
           System.out.println("inside procB");
           return;
        } finally {
           System.out.println("procB's finally");
        }
    }
    // Execute a try block normally.
    static void procC() {
        try {
           System.out.println("inside procC");
        } finally {
           System.out.println("procC's finally");
        }
    }

public static void main(String args[]) {
       try {
          procA();
       } catch (Exception e) {
          System.out.println("Exception caught");
       }
       procB();
       procC();
    }
}

该例中,procA( )过早地通过抛出一个异常中断了try。Finally子句在退出时执行。procB( )的try语句通过一个return语句退出。在procB( )返回之前finally子句执行。在procC()中,try语句正常执行,没有错误。然而,finally块仍将执行。

注意:如果finally块与一个try联合使用,finally块将在try结束之前执行。

下面是上述程序产生的输出:
inside procA
procA’s finally
Exception caught
inside procB
procB’s finally
inside procC
procC’s finally

转载于:https://www.cnblogs.com/ok932343846/p/6831833.html

六. 异常处理9.finally块相关推荐

  1. Ceph集群搭建系列(六):RBD块设备的使用场景、原理分析及其创建

    一.前言 下图数据出自2018年ceph社区用户调查报告,Ceph RBD接口的使用场景主要是VM和DB数据库. 而使用Ceph RBD的接口方式的用户数据如下,主要是librbd 和 kernel ...

  2. 六. 异常处理7.throw:异常的抛出

    到目前为止,你只是获取了被Java运行时系统抛出的异常.然而,程序可以用throw语句抛出明确的异常.Throw语句的通常形式如下:     throw ThrowableInstance; 这里,T ...

  3. Java课程实验报告实验六——异常处理

    一.实验目的 1.编写try-catch块处理异常 二.实验内容 1. [NumberFormatException异常]编写一个程序,提示用户输入两个整数,然后显示它们的和.用户输入错误时提示用户重 ...

  4. [你必须知道的.NET]第十六回:深入浅出关键字---using全接触

    本文将介绍以下内容: using指令的多种用法 using语句在Dispose模式中的应用 1. 引言 在.NET大家庭中,有不少的关键字承担了多种角色,例如new关键字就身兼数职,除了能够创建对象, ...

  5. Python程序异常处理:try、except、else、finally,捕获指定异常类型、捕获多个异常类型、捕获所有异常类型、捕获异常信息、异常的传递、raise抛出自定义异常

    输入与预期不匹配,触发异常,程序退出: 一.异常处理:使用try.except进行错误处理 为了保证程序运行的稳定性,错误应该被程序捕捉并合理控制 Python使用保留字try和except进行异常处 ...

  6. Python学习笔记(十三):异常处理机制

    Python学习笔记(十三):异常处理机制 关于Python的异常处理机制 Python学习笔记(十三):异常处理机制 一.异常处理机制 常见异常类型 二.异常处理 try...except 异常类的 ...

  7. 最全最详细的Java异常处理机制

    一.异常概述与异常体系结构 异常概述 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格 ...

  8. oracle schema_Oracle数据库坏块检查与修复

    摘要:简述数据库坏块,发现并处理Oracle的物理坏块.逻辑坏块 以下摘自网络并规整: 一.数据库坏块介绍 数据库的数据块有固定的格式和结构,分三层:cache layer,transaction l ...

  9. netbeans7.4_NetBeans 7.4 Beta提示警告无效的异常处理

    netbeans7.4 有许多例子说明Java异常处理可能比首次出现时要困难得多,Josh Bloch专门将一整章的< Effective Java> (两个版本)专门用于异常处理. Ja ...

最新文章

  1. delphi自定义事件处理
  2. hitTest和pointInside如何响应用户点击事件
  3. Snmp在Windows下的实现----WinSNMP编程原理
  4. 各国家分析之 古埃及非洲经济
  5. PHP弹窗回送,PHP点点滴滴 一(我抄来滴,非常简单的东西)
  6. 使用Angular,Ionic 4和Spring Boot构建移动应用
  7. vue3.0中使用Element-plus默认英文组件修改为中文
  8. 语言非递归求解树的高度_算法素颜(11):无死角“盘”它!二分查找树
  9. 提取lbp特征java代码_特征提取算法之LBP
  10. [转载] Python编程之np.argmax()的用法
  11. matlab三维矩阵的运算符,【求助】多维矩阵求和运算!!
  12. 华为手机流量日显示无服务器,华为手机开启了数据流量却不能上网怎么办
  13. springboot的开发流程
  14. 灵动微电子MM32L0系列芯片做呼吸灯功能
  15. 【codevs1422】河城荷取 二分+dinic
  16. 高效编程之IDEA自定义TODO
  17. oracle txn,【学习笔记】ORACLE分布式事务故障的处理 结合MOS官方文档分析
  18. SDN网络中控制器RYU的安装
  19. 如何合理的拆分微服务
  20. 微服务入门到入土(07)-分布式搜索ElasticSearch

热门文章

  1. 详解C++11智能指针
  2. PHP 使用 AES/ECB/PKCS7 padding 加密
  3. idea单行注释对齐修改Settings - Editor - Code Style-Code Generation,取消comment code的勾选
  4. weak_ptr指针编程实验
  5. c++ primer 第14章 习题解答
  6. 问题:python3关于json文件多余一行后发生的错误
  7. c++ primer第四版上的内容质疑
  8. C++ Primer这本书怎么样?
  9. 神经网络基础_反向传播_证明
  10. linux之父密码,Linux之父十大名言···