异常可能导致一个终止当前方法的错误,造成程序中断执行。然而,该方法可能已经执行了某些动作,比如打开了一个文件或者建立了一个网络连接等,用一般的手段不能完成关闭文件、断开网络连接等的操作。此时,需要一个在退出try/catch 代码块时必须执行的代码块。Java 提供了关键字finally 来处理这种情况。
为了在退出try/catch 代码块时设定一个要执行的代码块,在try/catch 代码的末尾引入了一个finally 代码块。try/catch/finally 的基本形式如下所示:
无论是出于何种原因,只要执行离开try/catch 代码块,就会执行finally 代码块。即无论try 是否正常结束,都会执行finally 块中的代码。就算try 代码块或catch块包含从方法返回的语句(reutrn),也会执行finally 代码块。
下面演示finally 的使用,如例7.3 所示。
例7.3:(www.daowen.com)
执行上面程序运行结果如下:
finally 关键字是用来定义紧跟在try/catch 异常块之后的代码块。finally 块是可选的,并且出现在try/catch 块之后。不管try 块中的代码怎样执行,finally 块中的代码总要执行一次。
在通常的执行过程中,控制到达try 块的末尾之后,继续执行finally 块,该块主要执行必要的清除工作。如果是由return,continue,break 等语句而使控制转移到try 块之外,在控制转移到try 块外面之前,仍然执行finally 块中的代码。如果在try 块中出现了异常,并且在方法中指定了一个catch 块来处理该异常,控制将首先转移到catch 块,然后转换到finally 块。如果没有catch 块来处理该异常,控制将首先转换到finally 块,然后上移至以前的方法调用,直到处理该异常为止。但在try块或catch 块中如果执行了System.exit(0)方法,则终止虚拟机,此时不会再执行finally 块。
一般地,finally 程序块中的代码完成一些资源释放和清理的工作。如关闭try 程序块中所有打开的文件,断开网络连接,使用getMessage()方法返回保存在某个异常中的描述字符串,使用PrintStackTrace()方法把调用堆栈的内容打印出来等。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。