try...catch中finally子句的使用
2024-10-21 02:42:55
目录:
- finally的使用
- finally面试题
- final、finally、finalize的区别
finally子句的使用:
1、在finally子句中的代码是最后且一定会执行的,即使try语句块中的代码出现异常
2、finally子句必须和try一起出现,不能单独编写
3、finally子句出现的情况如下:
通常finally语句块中完成资源的释放/关闭。
try{
System.out.println("hi");
return;
}finally{
System.out.println("finally");
}
//注意,try和finally联合使用,没有catch也可以,但try不能单独使用
以上代码执行顺序:
先执行try,后执行finally,最后执行return
注意:return语句只要执行,所在方法必然结束!
try{
System.out.println("hi");
//退出JVM
System.exit(0);
}finally{
System.out.println("finally");
}
//控制台输出:hi
原因:finally只有在退出JVM之后,其代码才不会执行
finally面试题:
判断下面程序输出的结果为多少?
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;
具体执行过程可以看代码反编译之后的结果
//上述代码反编译之后的结果
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负责调用的。
最新文章
- 查找(四)-------基于B树的查找和所谓的B树
- cell与cell之间的间距问题,以及section跟随屏幕滑动而滑动问题
- MBR(Master Boot Record)主引导记录分析
- ionic介绍
- 【练习】如何显示本地主机上的MySQL客户机版本
- Linux之sed,awk(流编辑器)
- 用django-tinymce搞个富文本编辑器
- asp生命周期
- Java设计模式偷跑系列(21)建模和实现享受metapatterns
- ★电车难题的n个坑爹变种
- Suricata默认规则集相关
- 关于canvas补充说明
- 字符编码ASCII,Unicode 和 UTF-8
- 8th,常用模块、正则表达式
- 浅析MySQL中concat以及group_concat的使用
- 用Python实现数据结构之栈
- ACCESS与SQL Server下SQL Like 查询的不同
- Django之模型层-了解ORM
- 可视化库-seaborn-调色板(第五天)
- ";流量监管";和";流量整形";的区别