try catch finally 用法[通俗易懂]
通俗易懂 用法 try catch finally
2023-06-13 09:12:07 时间
大家好,又见面了,我是你们的朋友全栈君。
在讲之前我们先看一段程序:
public class Test {
public static void main(String[] args) {
System.out.println("return value of getValue(): " +
getValue());
}
public static int getValue() {
try {
return 0;
} finally {
return 1;
}
}
}
请问答案是:“return value of getValue():0 还是 return value of getValue():1”呢?
在分析此问题之前先看看它们的介绍:
try catch finally 是java中的异常处理的常用标识符,常用的组合为:
1.
try {
//逻辑代码
}catch(exception e){
//异常处理代码
} finally{
//一定要执行的代码
}
2.
try {
//逻辑代码
}catch(exception e){
//异常处理代码
}
3.
try{
//逻辑代码
}finally{
//一定要执行的代码
}
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }
finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }
其实这些都还好理解,主要就是finally中的代码执行顺序的问题,这里给出我的想法:
正常情况下,先执行try里面的代码,捕获到异常后执行catch中的代码,最后执行finally中代码,但当在try catch中执行到return时,要判断finally中的代码是否执行,如果没有,应先执行finally中代码再返回。
例如某些操作,如关闭数据库等。
为了证实我的猜想,我们来看几个例子:
代码1:
public class Test {
public static void main(String[] args) {
System.out.println("return value of getValue(): " +
getValue());
}
public static int getValue() {
try {
System.out.println("try...");
throw new Exception();
} catch(Exception e){
System.out.println("catch...");
return 0;
}finally {
System.out.println("finally...");
return 1;
}
}
}
运行结果:
try...
catch...
finally...
return value of getValue(): 1
代码2:(将return 1 注释)
public class Test {
public static void main(String[] args) {
System.out.println("return value of getValue(): " +
getValue());
}
public static int getValue() {
try {
System.out.println("try...");
throw new Exception();
} catch(Exception e){
System.out.println("catch...");
return 0;
}finally {
System.out.println("finally...");
//return 1;
}
}
}
运行结果:
try...
catch...
finally...
return value of getValue(): 0
意思就是在try 和catch中如果要return,会先去执行finally中的内容再返回。
讲到这里,前面题目的答案也就知道了,是“return value of getValue():1”。
当在try中要return的时候,判断是否有finally代码,如果有,先执行finally,所以直接return 1.
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147367.html原文链接:https://javaforall.cn
相关文章
- crontab 用法(执行python文件)[通俗易懂]
- oracle sequence的用法[通俗易懂]
- java sortedset用法_Java SortedSet headSet()用法及代码示例[通俗易懂]
- React路由基本用法[通俗易懂]
- jq js100vh做减法算法[通俗易懂]
- 硬件介绍CPU显卡内存[通俗易懂]
- android中ListView的用法[通俗易懂]
- 关于quotename的用法[通俗易懂]
- SimpleDateFormat 常用用法[通俗易懂]
- java中static的用法[通俗易懂]
- 7_首页分类按级别展示[通俗易懂]
- FusionChartsFree的简单用法[通俗易懂]
- 八大排序算法(java实现) 冒泡排序 快速排序 堆排序 归并排序 等[通俗易懂]
- 网页游戏开发入门教程二(游戏模式+系统)[通俗易懂]
- JS基础——cssText的用法[通俗易懂]
- rand()函数的用法[通俗易懂]
- socketpair函数用法[通俗易懂]
- c语言 switch错误用法,C语言switch语句的详细用法[通俗易懂]
- FRP 内网穿透下载配置[通俗易懂]
- 算数平均数、中位数、众数和几何平均数[通俗易懂]
- C++之vector 初始化指定大小容量[通俗易懂]
- 如何在JavaScript中使用数组方法:Mutator方法[通俗易懂]
- Java实现简单的递归操作[通俗易懂]
- 修改Docker中nginx容器默认的端口号配置[通俗易懂]
- 浅析C语言之uint8_t / uint16_t / uint32_t /uint64_t[通俗易懂]
- python3中eval函数用法简介[通俗易懂]
- Matlab更改计算机用户名[通俗易懂]
- C语言中的所有运算符用法及总结[通俗易懂]
- Oracle Sequence Cache 参数说明[通俗易懂]