zoukankan      html  css  js  c++  java
  • Java知多少(51)finally

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

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

    下面的例子显示了3种不同的退出方法。每一个都执行了finally子句:

     1 // Demonstrate finally.
     2 class FinallyDemo {
     3     // Through an exception out of the method.
     4     static void procA() {
     5         try {
     6            System.out.println("inside procA");
     7            throw new RuntimeException("demo");
     8         } finally {
     9            System.out.println("procA's finally");
    10         }
    11     }
    12 
    13     // Return from within a try block.
    14     static void procB() {
    15         try {
    16            System.out.println("inside procB");
    17            return;
    18         } finally {
    19            System.out.println("procB's finally");
    20         }
    21     }
    22     // Execute a try block normally.
    23     static void procC() {
    24         try {
    25            System.out.println("inside procC");
    26         } finally {
    27            System.out.println("procC's finally");
    28         }
    29     }
    30 
    31     public static void main(String args[]) {
    32        try {
    33           procA();
    34        } catch (Exception e) {
    35           System.out.println("Exception caught");
    36        }
    37        procB();
    38        procC();
    39     }
    40 }

    该例中,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

    系列文章:
  • 相关阅读:
    bzoj 3171 [Tjoi2013]循环格(MCMF)
    spoj 839 Optimal Marks(二进制位,最小割)
    bzoj 1458 士兵占领(最大流)
    bzoj 3931 [CQOI2015]网络吞吐量(最短路,最大流)
    bzoj 2229 [Zjoi2011]最小割(分治+最小割)
    bzoj 1324 Exca王者之剑(黑白染色,最小割)
    BestCoder Round #75 解题报告
    (转)php 根据url自动生成缩略图并处理高并发问题
    PHP生成图片太慢了。。有些都不出来、
    PHP加Nginx实现动态裁剪图片方案
  • 原文地址:https://www.cnblogs.com/Coda/p/4474865.html
Copyright © 2011-2022 走看看