使用finally

有时你或许想要定义一个退出try/catch代码块时可以执行的代码块.例如,异常或许引起一个终止当前方法的错误,造成其提前返回.然而方法已经打开了一个需要关闭文件或网络连接.这种情况在程序设计中很常见,所以Java提供了一种方便的方式来处理这种情况,这种方式就是使用finally代码块.
为了指定一个要在退出try/catch代码块时执行的代码块,我们在try/catch代码块的末尾引入了finally代码块.包含finally的try/catch的基本形式如下所示:
try{
    //block of code to monitor for errors
} catch (exceptionType1 exOb) {
    //handler for exceptionType1
} catch (exceptionType2 exOb) {
    //handle for exceptionType2
} finally {
    //finally code
}
无论是处于何种原因,一旦执行流离开try/catch代码块,就会执行finally代码块.即无论try是正常结束还是由于异常结束,最后都会执行finally定义的代码.如果try代码块中的任何代码或他的任何catch语句从方法返回,也会执行finally代码块.
下面是finally代码块的示例:
        try {
            Rethrow.getException();
        }catch(Throwable exc) {
            System.out.println("standard message  is:");
            System.out.println(exc);
            System.out.println("Stack trace:");
            exc.printStackTrace();
        } finally {
            System.out.println("leaved try");
        }
输出:
standard message is:
java.lang.ArithmeticException
Stack trace:
java.lang.ArithmeticException
    at javaTest.Rethrow.getException(test2.java:28)
    at javaTest.test2.main(test2.java:10)
leaved try
示例2:
        try {
        }catch(Throwable exc) {
            System.out.println("standard message  is:");
            System.out.println(exc);
            System.out.println("Stack trace:");
            exc.printStackTrace();
        } finally {
            System.out.println("leaved try");
        }
输出:
leaved try
正如输出所示,无论try代码块如何退出,都会执行finally代码块.