[Java] try catch finally,try里有return,finally还执行么?

简介:

Condition 1: 如果try中没有异常且try中有return (执行顺序)

try ---- finally --- return

Condition 2: 如果try中有异常并且try中有return

try----catch---finally--- return


总之 finally 永远执行!

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

try----catch---finally

try中有异常以后,根据Java的异常机制先执行catch后执行finally,此时错误异常已经抛出,程序因异常而终止,所以你的return是不会执行的

Condition 4: 当 try和finally中都有return时,finally中的return会覆盖掉其它位置的return(多个return会报unreachable code,编译不会通过)。

Condition 5: 当finally中不存在return,而catch中存在return,但finally中要修改catch中return 的变量值时

int ret = 0;
try{ 
    throw new Exception();
}
catch(Exception e)
{
    ret = 1;  return ret;
}
finally{
    ret = 2;
} 

最后返回值是1,因为return的值在执行finally之前已经确定下来了












相关文章
|
9月前
|
设计模式 Java
Java中的finally一定会被执行吗
在Java中,`finally`块通常会在正常情况下执行,但在特定异常情况下(如调用`System.exit()`、`Runtime.getRuntime().halt()`、死锁、掉电或JVM崩溃)则不会执行。此外,`System.exit()`会触发JVM关闭钩子,而`Runtime.getRuntime().halt()`则不会。面试时遇到疑问句,答案往往是“否定”的,符合这一逻辑。
186 0
Java中的finally一定会被执行吗
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
322 2
|
Java
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
本文探讨了在Java中,当父类的方法返回`this`对象或变量时,子类调用该方法的行为,以及`this`关键字在不同类中调用方法时的指向问题。
122 0
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
417 0
Java中 final、finally、finalize 有什么区别?
【Java基础面试四十】、在finally中return会发生什么?
文章讨论了在Java中finally块中使用return语句的问题,指出如果在finally块中使用return或throw语句,将导致try块或catch块中的相应语句失效,因为finally块中的return或throw会终止方法,之后系统不会再执行try或catch块中的代码。
【Java基础面试三十九】、 finally是无条件执行的吗?
这篇文章解释了Java中的finally块的特性,即无论是否发生异常或执行了return语句,finally块都会无条件执行,除非使用System.exit()退出虚拟机。
|
Java
java中return,break以及continue的用法
java中return,break以及continue的用法
307 10
|
Java 编译器
Java中的return语句深入解析
Java中的return语句深入解析
805 0
Java中return的两种用法
Java中return的两种用法
255 0
|
编译器
java-基础-try、catch和finally
1、try块中没有抛出异常,try、catch和finally块中都有return语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
869 0