关于try和finally执行顺序问题
程序员文章站
2024-03-20 18:46:52
...
关于try和finally执行顺序问题总结如下
1、当try和finally里都有return时,会忽略try的return,而使用finally的return。
例1: public static int aaa() {
int x = 1;
try {
return ++x;
} catch (Exception e) {
} finally {
++x;
return x;
}
return x;
}
class 文件编译成
public static int aaa() {
int x = 1;
try {
++x;
} catch (Exception var5) {
;
} finally {
++x;
return x;
}
}
2、当try有return finally中没有return 时,finally会依然执行,但是当执行到return ++x;时,jvm在执行完++x后会在局部变量表里另外分配一个空间来保存当前x的值,因此最后返回的结果是2。
例2:
public static int aaa() {
int x = 1;
try {
return ++x;
} catch (Exception e) {
} finally {
++x;
return x;
}
return x;
}
class 编译
public static int aaa() {
int x = 1;
try {
++x;
int var1 = x;
return var1;
} catch (Exception var5) {
;
} finally {
++x;
}
return x;
}
3、当try有return finally中没有return 时,finally会依然执行,当返回的是引用对象,并且finally中进行修改引用对象的值时,返回的结果将会finally最后执行的结果,返回的是同一个地址,所以最后user的name值等于李四。
例3:
public static User getUser() {
User user = new User();
try {
user.setName("张三");
return user;
} catch (Exception e) {
} finally {
user.setName("李四");
}
return user;
}
class编译
public static User getUser() {
User user = new User();
try {
user.setName("张三");
User var1 = user;
return var1;
} catch (Exception var5) {
;
} finally {
user.setName("李四");
}
return user;
}
4、当执行到try或者catch时,线程被停止或者JVM退出了,那么finally语句可能也不会执行了
参考:https://blog.csdn.net/stduent_/article/details/60955365
如有错误之处,欢迎指出
推荐阅读
-
关于try和finally执行顺序问题
-
有关Java异常处理中包含return语句的try和finally执行顺序的实证 博客分类: Java Java异常处理执行顺序
-
Java异常处理中同时有finally和return语句的执行问题
-
关于Java中try finally return语句的执行顺序浅析
-
关于Java中try finally return语句的执行顺序浅析
-
关于SQL语句中的AND和OR执行顺序遇到的问题
-
JavaScript中关于代码执行的先后顺序问题详解
-
关于cookie在代码中执行的顺序有关问题
-
try catch finally的执行顺序深入分析
-
try catch finally的执行顺序深入分析