try...catch中finally子句的使用
目录:
- finally的使用
- finally面试题
- final、finally、finalize的区别
finally子句的使用:
1、在finally子句中的代码是最后且一定会执行的,即使try语句块中的代码出现异常
2、finally子句必须和try一起出现,不能单独编写
3、finally子句出现的情况如下:
通常finally语句块中完成资源的释放/关闭。
1 2 3 4 5 6 7 8 9 | try { System.out.println( "hi" ); return ; } finally { System.out.println( "finally" ); } //注意,try和finally联合使用,没有catch也可以,但try不能单独使用 以上代码执行顺序: 先执行 try ,后执行 finally ,最后执行 return |
注意:return语句只要执行,所在方法必然结束!
1 2 3 4 5 6 7 8 9 | try { System.out.println( "hi" ); //退出JVM System.exit( 0 ); } finally { System.out.println( "finally" ); } //控制台输出:hi 原因: finally 只有在退出JVM之后,其代码才不会执行 |
finally面试题:
判断下面程序输出的结果为多少?
1 2 3 4 5 6 7 8 9 10 11 12 | public static void main(String[] args){ int result = m(); System.out.println(result); } public static int m(){ int i = 100 ; try { return i; } finally { i++; } } |
答案:100
原因:
存在一些Java语法规则,方法体中的代码必须遵循自上而下的顺序依次执行;return语句一旦执行,整个方法必须结束。
在以上程序中执行完int i=100之后,代码执行就到了return i;此时为return 100;此语句搁置,先执行finally,最后执行return 100;
具体执行过程可以看代码反编译之后的结果
1 2 3 4 5 6 7 8 9 10 11 | //上述代码反编译之后的结果 public static int m(){ int i= 100 ; int j=i; i++; //finally语句确实在return i;之前执行 return j; //return 100 Exception exception; exception; i++; throw exception; } |
final、finally、finalize的区别:
final是一个关键字,表示不变的,最终的
final int i=100;
其中final修饰的类无法继承、修饰的方法无法覆盖、修饰的变量不能重新赋值。
finally也是一个关键字,和try联合使用,用在异常机制中,并且finally语句块中的代码一定会执行
finalize()是object类中的一个方法,作为方法名出现,属于标识符,这个方法是由垃圾回收器G负责调用的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!