[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之前已经确定下来了












相关文章
|
设计模式 Java
Java中的finally一定会被执行吗
在Java中,`finally`块通常会在正常情况下执行,但在特定异常情况下(如调用`System.exit()`、`Runtime.getRuntime().halt()`、死锁、掉电或JVM崩溃)则不会执行。此外,`System.exit()`会触发JVM关闭钩子,而`Runtime.getRuntime().halt()`则不会。面试时遇到疑问句,答案往往是“否定”的,符合这一逻辑。
371 0
Java中的finally一定会被执行吗
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
500 2
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
790 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】final、finally、finalize 有什么区别?
【JAVA】final、finally、finalize 有什么区别?
|
Java
面试官:小伙子来说一说Java中final关键字,以及它和finally、finalize()有什么区别?
面试官:“小伙子,用过final关键字吗?” 我:“必须用过呀” 面试官:“好,那来说一说你对这个关键字的理解吧,再说一说它与finally、finalize()的区别” 我:“好嘞!
233 1
|
10月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
440 1
|
10月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
410 1
|
11月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案