Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >try catch finally 用法[通俗易懂]

try catch finally 用法[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-09-07 03:08:25
发布于 2022-09-07 03:08:25
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

在讲之前我们先看一段程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中的异常处理的常用标识符,常用的组合为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
         }
     }
 }

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try...
catch...
finally...
return value of getValue(): 1

代码2:(将return 1 注释)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
         }
     }
 }

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
你听说过Go语言的TryCatch吗?
有的同学看到Go和TryCatch一起出现,心里可能会说,难道Go语言升级了,加入了try...catch语句。哈哈,其实Go语言从创建之初就没打算加入try...catch语句,因为创建Go的那帮大爷认为try...catch挺烦人的,如果滥用,会造成程序混乱,所以就不打算加入try...catch(以后加不加入不好说)。
蒙娜丽宁
2020/04/14
1.3K0
​Java中关于try、catch、finally中的细节分析
阿里巴巴开发手册中有这么一条:【强制】不要在 finally 块中使用 return , 在开发过程中发现部分同学对这条规则理解不是很透彻,本文将就 try 、catch、finally 的一些问题,分析一下 try 、catch、finally 的处理流程。
weylan
2021/10/29
1.1K0
3分钟告诉你try-catch-finally的return需要注意的问题
注意点: try代码块中,return后面的表达式先执行再把值临时存储起来。接着执行finally代码块,执行完finally代码块后再去执行try代码块中的return。如果finally代码块中有return,那么就直接返回了,不会让try代码块中return返回。
砖业洋__
2023/05/06
1490
3分钟告诉你try-catch-finally的return需要注意的问题
面试官:小伙子来说一说Java中final关键字,以及它和finally、finalize()有什么区别?
面试官:“小伙子,用过final关键字吗?” 我:“必须用过呀” 面试官:“好,那来说一说你对这个关键字的理解吧,再说一说它与finally、finalize()的区别” 我:“好嘞!”
JavaBuild
2024/05/27
1130
面试官:小伙子来说一说Java中final关键字,以及它和finally、finalize()有什么区别?
你真的理解Java中的try/catch/finally吗?
上面这几个例子,大多数人已经非常了解。同时也衍生出一些理论,比如不要在finally中return等,不再赘述。
xiaoxi666
2019/06/01
7080
try-catch-finally中的4个大坑,不小心就栽进去了!
在 Java 语言中 try-catch-finally 看似简单,一副人畜无害的样子,但想要真正的“掌控”它,却并不是一件容易的事。别的不说,咱就拿 fianlly 来说吧,别看它的功能单一,但使用起来却“暗藏杀机”,若您不信,咱来看下面的这几个例子...
磊哥
2021/02/02
1K0
编程思想 之「异常及错误处理」
在 Java 的异常及错误处理机制中,用Throwable这个类来表示可以作为异常被抛出的类。Throwable对象可以细分为两种类型(指从Throwable继承而得到的类型),分别为:
CG国斌
2018/03/22
1.5K3
编程思想 之「异常及错误处理」
Java——try catch finally异常的捕获及处理逻辑实例详解大全
异常指的是导致程序中断执行的一种指令流。一旦发生异常且没有正常处理的话,程序将中断执行。
Winter_world
2020/09/25
5.4K0
Java——try catch finally异常的捕获及处理逻辑实例详解大全
你还在使用 try-catch-finally 关闭资源?不太优雅~
链接:https://juejin.im/post/5b8f9fa05188255c6f1df755
好好学java
2021/01/08
6690
java异常处理机制(try-catch-finally)
/* * try和finally内的代码块是肯定会执行的 * catch中的代码块只有抛出异常时才会执行(如果有多个catch,只会执行一个,而且抛出的异常也只有一个) * * * 当然平时我们会用到一些自定义的异常,下面我们介绍一下自定义异常的内容 * * 自定义异常必须要继承Exception类,否者无法抛出异常*/
用户3030674
2018/09/14
6180
解决多个io流需要关闭而重复嵌套try-catch-finally的问题
相信大多数人都见过如此状态,流多了需要层层关闭,需要层层加上try-catch,为保证下一个流能关闭又要加上finally,烦人!!
砖业洋__
2023/05/06
5480
解决多个io流需要关闭而重复嵌套try-catch-finally的问题
【Java】异常处理指南
异常种类繁多,为了对不同异常或者错误进行很好的分类管理,Java内部维护了一个异常的体系结构:
IsLand1314
2024/10/15
2260
【Java】异常处理指南
我去,你竟然还在用 try–catch-finally
这是读者 Alice 上周特意给我发来的信息,真令我动容。的确,上次的“我去”阅读量杠杠的,几个大号都转载了,包括 CSDN,次条当天都 1.5 万阅读。但比如“还以为你有什么新特技,没想到用的是 Java 13”这类批评的声音也不在少数。
沉默王二
2020/04/07
1.3K0
我去,你竟然还在用 try–catch-finally
Java关键字 Finally执行与break, continue, return等关键字的关系
长文短总结: 在程序没有在执行到finally之前异常退出的情况下,finally是一定执行的,即在finally之前的return语句将在finally执行之后执行。 finally总是在控制转移语句(break,continue,return等)执行之前执行。 可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机。接下来我就带您一步一步的揭开这个 finally 的神秘面纱。 问题分析 首先来问大家一个问题:finally 语句块一定会执行吗? 很多人都认为 finally
老白
2018/03/19
3.9K0
Java关键字 Finally执行与break, continue, return等关键字的关系
《JavaSE-第十三章》之异常体系
现实生活中当人的出现了一些毛病,可能就会出现发烧,感冒之类的问题。而我们写的程序也是如此,程序在执行的过程中难免出现一些奇奇怪怪的问题。因此,在java中这些在程序运行中发生的不正常的行为被称为异常。
用户10517932
2023/10/07
1870
《JavaSE-第十三章》之异常体系
【Java疑难杂症】有return的情况下try catch finally的执行顺序
文章介绍了异常处理的原理,总结了解决办法,分析了在实际编程中可能遇到的问题以及解决方法,包括使用try-catch语句和自定义异常。
弗兰克的猫
2018/01/09
6830
Java——你真的了解Java异常处理机制吗?[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 目录 1.初识异常 2.异常的基本用法 异常处理流程 3.为什么要使用异常? 异常应只用于异常的情况 4. 异常的种类 4.1 受查异常 解决方案: 4.2非受查异常 5.如何使用异常 避免不必要的使用受查异常 6.自定义异常 ---- 1.初识异常 我们在写代码的时候都或多或少碰到了大大小小的异常,例如: public class Test { public static void main(String[] args) {
全栈程序员站长
2022/08/30
6740
Java——你真的了解Java异常处理机制吗?[通俗易懂]
处理异常不再困难try-catch-finally和throw语句详解
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2023/12/06
4120
处理异常不再困难try-catch-finally和throw语句详解
try{}catch{}finally{}运行后的执行结果
1.以下执行结果? (1).代码 public class Demo { public static void main(String[] args) { System.out.println(getValue()); } public static int getValue(){ Scanner sc = new Scanner(System.in); System.out.println("输入一个数"); int
2020/10/23
8620
【Java】try-catch-finally语句中return的执行顺序思考
对于try-catch-finally语句中return的执行顺序,我们都有知道,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因。
用户7886150
2021/04/06
7690
推荐阅读
相关推荐
你听说过Go语言的TryCatch吗?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验