Java - try、catch、finally(包含 return)

简介: Java - try、catch、finally(包含 return)

一、结论

不管有没有出现异常,finally块中代码都会执行;

当try和catch中有return时,finally仍然会执行;


finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;


finally中最好不要包含return,否则程序会提前退出,注意这里的finally return中的返回值不是try或catch中保存的返回值。


二、栗子


try{} catch(){}finally{} return;

Ps:显然程序按顺序执行。


try{ return; }catch(){} finally{} return;

Ps(无异常):程序执行try块中return之前(包括return语句中的表达式运算)代码;

再执行finally块,最后执行try中return;

finally块之后的语句return,因为程序在try中已经return所以不再执行。


try{ } catch(){return;} finally{} return;

Ps:程序先执行try,如果遇到异常执行catch块:

有异常:则执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,最后执行catch块中return。finally外面的return代码不再执行。

无异常:执行完try再finally再return.


try{ return; }catch(){} finally{return;}

Ps(无异常):程序执行try块中return之前(包括return语句中的表达式运算)代码;

再执行finally块,因为finally块中有return所以提前退出。


try{} catch(){return;}finally{return;}

Ps(有异常):程序执行catch块中return之前(包括return语句中的表达式运算)代码;

再执行finally块,因为finally块中有return所以提前退出。


try{ return;}catch(){return;} finally{return;}

Ps:程序执行try块中return之前(包括return语句中的表达式运算)代码:

有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;则再执行finally块,因为finally块中有return所以提前退出。

无异常:则再执行finally块,因为finally块中有return所以提前退出。


三、总结

任何执行 try 或者 catch 中的 return 语句之前,都会先执行 finally 语句,如果 finally 存在的话。

如果 finally 中有 return 语句,那么程序就 return 了,所以 finally 中的 return 是一定会被 return 的,编译器把 finally 中的 return 实现为一个 warning。


目录
相关文章
|
13天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
31 2
|
24天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
19 1
|
1月前
|
Java
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
本文探讨了在Java中,当父类的方法返回`this`对象或变量时,子类调用该方法的行为,以及`this`关键字在不同类中调用方法时的指向问题。
15 0
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
|
1月前
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
30 0
Java中 final、finally、finalize 有什么区别?
|
6月前
|
Java
Java中return的两种用法
Java中return的两种用法
|
6月前
|
Java API
【JAVA】final、finally、finalize 有什么区别?
【JAVA】final、finally、finalize 有什么区别?
|
3月前
|
Java
【Java基础面试三十九】、 finally是无条件执行的吗?
这篇文章解释了Java中的finally块的特性,即无论是否发生异常或执行了return语句,finally块都会无条件执行,除非使用System.exit()退出虚拟机。
|
3月前
|
Java
【Java基础面试四十】、在finally中return会发生什么?
文章讨论了在Java中finally块中使用return语句的问题,指出如果在finally块中使用return或throw语句,将导致try块或catch块中的相应语句失效,因为finally块中的return或throw会终止方法,之后系统不会再执行try或catch块中的代码。
|
4月前
|
Java
java中return,break以及continue的用法
java中return,break以及continue的用法
47 10
|
6月前
|
Java 编译器
Java中的return语句深入解析
Java中的return语句深入解析
368 0