先来一个总结:如果明白的话,可以不用看后面的12个例子
* 只要finally中有return语句,返回的就是finally中修改后的值;
* 如果finally中没有的话,基本数据类型返回是try中的值(无异常时)或catch中的值(有异常时),
同一个引用数据类型的变量返回的是执行完finally语句之后的引用数据变量的值,不同的引用类型数据的变量返回的是try或catch中的引用数据类型的变量
根据有无异常,返回类型(基本数据类型,同一个引用数据类型的变量,不同引用数据类型的变量),finally中有无return语句,可以得到12个例子,我们就从这12个例子着手,去分析finally中有无return语句时的执行情况;更详细的话,需要去看编译后的class文件,这里只简单提一下,可以javac 文件名.java 【编译成JVM能够读懂的字节码(相当于物理机器能识别运行的机器码)】,得到class文件,去分析这个汇编文件,里面会涉及到一些变量,你可以看到在try,catch中会对返回值进行暂存,然后先执行finally语句,再执行return语句。
12个例子在下文代码中都有详细的注释,可以对照着来看,如有不懂,欢迎私戳 ^>^
/**
* Author:Sophie
* Created: 2019/9/2
*/
/**
* try,catch,finally中有无return语句的执行顺序
*/
//我们知道有异常时会执行catch,finally块;无异常会执行try,catch块
//所以在这里我们从这两种大情况入手
public class Test {
int a;
public static v