`

try-catch-finally中return的执行情况

阅读更多
try中没有异常的情况下try、catch、finally的执行顺序 try--- finally
如果try中有异常,执行顺序是try--- catch --- finally
如果try中没有异常并且try中有return这时候正常执行顺序是try ----finally --- return
如果try中有异常并且try中有return这时候正常执行顺序是try----catch---finally---return
总之 finally 永远执行!
try-catch-finally里都没有return ,finally 之后有个return,如果try中有异常,finally执行完后,还能执行return吗?那是不可能执行的了,try中有异常以后,根据java的异常机制先执行catch后执行finally,此时错误异常已经抛出,程序因异常而终止,所以你的return是不会执行的
<wbr></wbr>
<wbr><wbr><wbr>在存在try-catch-finally的方法中,return可能出现的位置有4个,在try中,在catch中,在finally中,在finally后(try-catch-finally外的语句块)。</wbr></wbr></wbr>
<wbr><wbr><wbr>在这4个位置都出现return的情况下(事实上应该是不可能的,如果前面3个位置都存在return,那么最后一个位置的return就成了unreachablecode,编译不会通过),最终会执行的return应该是finally中的return。也就是<strong><span style="color:#0A18FD">finally中的return会覆盖掉其它位置的return</span></strong>。</wbr></wbr></wbr>
try中有return语句

-------- try catch finally顺序:
1.try {}.
2.如果有Error Exception则,执行catch(){}中的代码。
3.无论有没有 Error Exception都要执行finally{}中的代码。
4.执行 try 中的 return

catch中有return

<wbr>但当finally中不存在return,而catch中存在return,但finally中的语句又会对catch中的return的值产生影响时,情况就有点复杂。</wbr>

int ret = 0;
try{

    throw new Exception();

    }
catch(Exception e){

    ret = 1;

   return ret;
}
finally{

    ret  = 2;
}
这里finally中没有return,但是将catch中要return的ret赋值为2.那么最后返回的值是1. 为什么?
从调试中可以知道Finally中的赋值语句的确被执行了,而执行完这条finally语句后的下一条语句就是catch中的return,那么为啥返回的是1呢?
catch中有return,finally中没有return,return的值在执行finally之前已经确定下来了。
另一个值得注意的是最后的return(位于try-catch-finally外)并没有被执行。
分享到:
评论

相关推荐

    try-catch-finally-return-in-finally.rar_return

    标题 "try-catch-finally-return-in-finally.rar_return" 提到了 `try-catch-finally` 结构与 `return` 语句的交互,这涉及到程序执行流程的关键方面。 `try` 块是用来包含可能会抛出异常的代码。如果在 `try` 块中...

    try-catch-finally捕获异常

    try-catch-finally语句是Java语言中一种常用的异常处理机制,当程序在执行过程中出现异常时,可以使用try-catch-finally语句来捕获和处理异常。下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try...

    使用try-catch-finally处理异常

    即使在`try`或`catch`块中有return语句,`finally`块的代码也会被执行。 5. **多层嵌套** 你还可以在`try-catch-finally`结构内部嵌套另一个`try-catch-finally`结构,以处理更复杂的情况。这种方式使得异常处理...

    try_catch_finally异常处理java

    即使`try`或`catch`块中存在`return`语句,`finally`块的代码也会被执行。这确保了程序的整洁和资源的有效管理。 在Java中,`try-catch-finally`结构可以单独使用,也可以嵌套使用。嵌套的`try-catch-finally`允许...

    try、catch、finally、return 执行顺序.doc

    try、catch、finally、return 执行顺序是 Java 编程语言中的一种 exception 处理机制,用于处理程序中的异常情况。下面我们来详细讲解 try、catch、finally、return 执行顺序的规则和特点。 首先,我们需要了解 try...

    谈谈Java中try-catch-finally中的return语句

    在Java编程语言中,`try-catch-finally`语句块是异常处理的关键构造,它允许程序员优雅地处理可能出现的异常情况。`return`语句则用于从方法中返回一个值或者结束方法的执行。当这两者结合在一起时,就会出现一些...

    try-catch-finally执行顺序验证

    try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...

    java 中finally语句块与return的执行关系

    首先,需要了解的是,在 try-finally 或者 catch-finally 中,如果 try 或者 catch 中有 return 语句,则 finally 中的代码一定会执行,并且是在 return 前执行的。如果 finally 中也有 return 语句,那么finally 中...

    关于Java中的try-catch-finally语句和return

    第一:return语句并不是函数的终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)  第二:finally里面不建议放return语句,根据需要,return语句...

    Jungle68#-#[Java] try catch finally,try里有return,finally还执行么?1

    Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据

    java try…catch捕获异常的实例

    即使在`try`或`catch`块中有`return`语句,`finally`块中的代码也会被执行: ```java try { // 代码 } catch (ExceptionType1 e1) { // 处理 } catch (ExceptionType2 e2) { // 处理 } finally { // 清理资源,...

    try~catch~finally中关于return的问题

    在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视

    375.373.JAVA基础教程_异常处理-处理异常:try-catch方式(375).rar

    即使在try或catch块中有return语句,finally块中的代码也会被执行。 4. **throw**:程序员可以使用throw关键字手动抛出一个异常,这在检测到错误条件时非常有用。 5. **throws**:如果方法可能抛出异常但不处理,...

    exception-try-catch-java

    即使`try`或`catch`块中有`return`语句,`finally`块的代码仍然会被执行。 `throw`关键字用于手动抛出一个异常。程序员可以在检测到错误条件时主动抛出异常,而不是等待Java运行时系统自动抛出。 ```java throw ...

    Java finally语句到底是在return之前还是之后执行?

    在这个例子中,无论`try`或`catch`块中的`return`语句如何,`finally`块都会执行,确保文件流被关闭。 总的来说,Java的`finally`语句块确保了关键代码的执行,尤其是在处理异常或资源清理的情况下。理解`finally`...

    try catch finally的执行顺序深入分析

    在这个过程中,函数会将`try`或`catch`块中的`return`语句返回的值暂存起来,然后执行`finally`块。 如果在`finally`块中也有`return`语句,那么这个`return`值会覆盖之前暂存的值。也就是说,最终返回给调用者的值...

    Java 实例 - Finally的用法源代码-详细教程.zip

    - 即使`return`语句在`try`或`catch`块中出现,`finally`块的代码也会在返回之前执行。但要注意,`finally`块中的`return`语句会覆盖掉`try`或`catch`中的`return`结果。 3. 示例代码: ```java try { // 可能...

    Java异常处理-异常处理的方式1

    - 题1:`finally`块中的return语句会覆盖try-catch块中的return吗? - 题2:如果`finally`块中有throw语句,会怎样? - 题3:如何在`finally`块中避免覆盖已设置的返回值? 总的来说,Java异常处理机制使得代码更加...

    关于java try()的括号中代码含义(实现Closeable接口)(csdn)————程序.pdf

    在传统的`try-catch-finally`中,`finally`块用于确保在执行完`try`块后,即使有异常抛出,资源也能被正确关闭。然而,这需要手动调用`close()`方法,如文件流、网络连接等。 Java 7引入的`try-with-resources`语句...

    trycatch.zip

    本示例中的"trycatch.zip"文件内容就是展示了如何在Golang中模拟`try...catch`和`try...catch...finally`。 Golang的核心错误处理方式是通过返回错误值。通常,函数会返回一个错误值,如果在执行过程中遇到问题,就...

Global site tag (gtag.js) - Google Analytics