先看两段代码,请试着分别写出它们的输出结果。
1、try-catch 块与 finally 块同时抛异常。
import java.io.IOException; public class ExceptionInFinallyBlock { public static void main(String[] args) { try { try { System.out.print("A"); throw new Exception("1"); } catch(Exception e) { System.out.print("B"); throw new Exception("2"); } finally { System.out.print("C"); throw new IOException("3"); } } catch (Exception e) { System.out.println(e.getMessage()); } } }
2、try-catch 块与 finally 块同时包含 return 语句。
public class ReturnStatementInFinallyBlockTest { public static void main(String[] args) { System.out.println(getReturnValue()); } public static int getReturnValue() { try { System.out.print("A"); return 1; } finally { System.out.print("C"); return 2; } } }
Java标准文档中给出了详细的描述,可以用一句话简单概括上面两个示例执行逻辑:
- 在 finally 块中抛出的任何异常都会覆盖掉在其前面由 try 或者 catch 块抛出异常。包含 return 语句的情形相似。
鉴于此,除必要情况下,应该尽量避免在 finally 块中抛异常或者包含 return 语句。
PS: 实际上,当你把上面两段代码拷贝到 eclipse,会收到 eclipse 的 warning: finally block does not complete normally。
----------------
输出结果:
1、ABC3
2、AC2
本文总结自:SO
相关推荐
finally语句块与return的执行关系
Java语言finally语句详解,finally到底是在return之前还是之后执行.zip
在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视
Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。
try语句块:包含可能抛出异常的代码。 catch语句块:捕获并处理try语句块中抛出的异常。每个catch语句块捕获一种特定类型的异常。 finally语句块:无论是否发生异常,finally语句块中的代码都将被执行。通常用于清理...
1.需要完成的任务 使用UserDaoImp1类和User...(2)为了判断在finally块输出是否抛出异常,可以设置一个变量,在catch块里修改这个变量 实践四:使用log4j 需求说明 (1)使用log4j输出日志信息 (2)查看输出日志信息
Delphi异常处理try_except语句和try_finally语句用法以及区别.pdf Delphi异常处理try_except语句和try_finally语句用法以及区别.pdf
第一:return语句并不是函数的终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回) 第二:finally里面不建议放return语句,根据需要,return语句...
try块包含可能会抛出异常的代码,catch块包含用于处理特定类型异常的代码,finally块包含无论是否发生异常都需要执行的代码。 示例: ```java try { // 尝试执行的代码,可能会抛出异常 int result = 10 / 0; ...
NULL 博文链接:https://seaizon.iteye.com/blog/2066983
2.3 try-except-else-finally 语句 2.4 小结 三、异常抛出 (Exception raising) 四、异常自定义 (Exception customizing) 五、预定义的清理行为 (with 语句) 六、断言 (Asserting) 七、小结 (Summary) 一、绪论 ...
无论是否抛出异常,finally代码块都会执行,它主要是用来释放应用占用的资源。finalize()方法是Object类的一个protected方法,它是在对象被垃圾回收之前由Java虚拟机来调用的。 ## 四. finally到底是在return之前...
主要介绍了Java异常处理中同时有finally和return语句的执行问题,首先确定的是一般finally语句都会被执行...然后,需要的朋友可以参考下
异常+异常处理+try-catch-finally+教程 - 本资源是一个异常处理的教程,教你如何用Java的try-catch-finally语句处理异常,包括抛出和捕获异常,自定义异常,多个异常,finally块等。
C#异常处理总结及简单实例 一、异常处理的理解? 异常处理是指程序在运行过程中,发生...3、finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。 例如如果你打开一个文件,不管是否出现异常文件都
17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句...
为了处理异常,我们使用try-catch-finally语句块。在try块中编写可能抛出异常的代码,然后使用一个或多个catch块来捕获并处理这些异常。finally块用于执行无论是否发生异常都必须执行的代码,例如资源释放。 除了...
试试上面的代码,可以看到其实在进入 try 时,抛出 ArgumentException 不会立刻返回到 F1 方法里面,而是会继续执行 finally 方法在
关于Java中finally语句块的深度辨析.doc
try-catch-finally捕获异常try-catch-finally捕获异常