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。


目录
相关文章
|
7月前
|
Java
【Java每日一题,BFS】Catch That Cow
【Java每日一题,BFS】Catch That Cow
|
8月前
|
Java
Java 中 return,continue,break的区别
Java 中 return,continue,break的区别
49 0
|
4月前
|
监控 Java 程序员
详解Java中的异常体系结构(throw,throws,try-catch,finally,自定义异常)
详解Java中的异常体系结构(throw,throws,try-catch,finally,自定义异常)
42 0
|
4月前
|
Java 数据库连接
【零基础学Java】—finally代码块(四十七)
【零基础学Java】—finally代码块(四十七)
|
5月前
|
Java 程序员 编译器
[java进阶]——异常详解,try catch捕获异常,抛出异常
[java进阶]——异常详解,try catch捕获异常,抛出异常
|
10月前
|
Java
Java中的final finally finalize关键字
Java中的final finally finalize关键字
|
10月前
|
Java 数据库连接
【Java基础】[异常处理]try,catch,finally
【Java基础】[异常处理]try,catch,finally
Java 最常见的面试题:try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
Java 最常见的面试题:try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
|
Java
Java中的return作用
Java中的return作用
82 0
Java中的return作用
|
Java
Java中Return的作用
其实Java提供return,是为了保持调用者与被调用者进行通信的关键。比如某个对象调用了一个方法,他需要根据这个方法不同的返回值进行不同的业务处理。如果没有return机制的话,那就只能进行单一的业务处理了,不存在多种情况了。返回值的意义就是保持方法的调用者与被调用者进行通信的关键,这和java中异常抛出的机制是一样的。下面跟你简单说说return的两种用法吧 retu
1447 0