解析java异常中的finally关键字
解析java异常中的finally关键字
1 含义
try…catch.finally里面的可选结构
2 作用
2.1 内容
finally声明的是一定会被执行的代码
2.2 遇到以下三种情况也还是会去执行
2.2.1 catch里面继续出现了异常
a 示例代码
package Work;
public class Test {public static void main(String[] args) {try {int a=10/0;} catch (ArithmeticException e) {int[] a=new int[10];a[10]=100;e.printStackTrace();}finally {System.out.println("finally里面的代码块");}}
}
b 示例代码运行截图
2.2.2 try代码块里面有返回值
a 示例代码
package Work;
public class Test {public static void main(String[] args) {System.out.println(f1());}public static int f1(){try {int a=10/2;return 1;//此时有返回值也不会立马返回,要等finally执行完成才能返回// 若finally里面有返回,则会以finally里面的返回值为准} catch (ArithmeticException e) {System.out.println("有算术异常");return 2;}finally {System.out.println("finally里面的代码块");return 3;//会以finally里面的返回值为准}}
}
b 示例代码运行截图
2.2.3 catch代码块里面有返回值
a 示例代码
package Work;
public class Test {public static void main(String[] args) {System.out.println(f1());}public static int f1(){try {int a=10/0;return 1;} catch (ArithmeticException e) {System.out.println("正在处理算术异常");return 2;}finally {System.out.println("finally里面的代码块");return 3;//finally只要有返回值,那么会以finally里面的返回值为准}}
}
b 示例代码运行截图
2.3 特殊情况
在try里面遇到System.exit(0)时,此时finally里面的代码不会去执行
示例代码
package Work;
public class Test {public static void main(String[] args) {System.out.println(f1());}public static int f1(){try {System.out.println("使用System.exit(0)方法之前");System.exit(0);int a=10/0;return 1;} catch (ArithmeticException e) {System.out.println("正在处理算术异常");return 2;}finally {System.out.println("finally里面的代码块");return 3;//finally只要有返回值,那么会以finally里面的返回值为准}}
}
示例代码运行截图
3 怎么用
3.1 使用场景
像数据库连接、输入输出流、键盘输入Scanner等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的释放.像这些的资源释放,就必须要放在finally里的代码块中
保证这些关闭操作不会被异常中断,能正常关闭
3.2 示例代码
package Work;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.println("请输入数字n:");try {int number=scanner.nextInt();}catch (InputMismatchException e) {e.printStackTrace();}catch (Exception e) {e.printStackTrace();}finally {scanner.close();//就算出现了异常,我们也可以把这个所占用的资源给关闭掉System.out.println("scanner对象关闭了");}}
}
3.3 示例代码运行截图
解析java异常中的finally关键字相关推荐
- Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别常见的几种异常
Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别 一.概述 在java异常体系中,要打印异常信息,可以通过:e.getMess ...
- java异常中的Error和Exception的区别是什么?
java异常中的Error和Exception的区别是什么? 参考文章: (1)java异常中的Error和Exception的区别是什么? (2)https://www.cnblogs.com/Tr ...
- java学习中,instanceof 关键字 和 final 关键字、值的传递(java 学习中的小记录)...
java学习中,instanceof 关键字 和 final 关键字.值的传递(java 学习中的小记录)作者:王可利(Star·星星) instanceof 关键字 作用: 1.用来判断某个对象是否 ...
- java异常中的finally(一)
java异常中的finally(一) 参考文章: (1)java异常中的finally(一) (2)https://www.cnblogs.com/liaoxiaolao/p/9586134.html ...
- 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)
写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持) 参考文章: (1)写给大忙人的ELK最新版6.2.4学习笔记-Logstash ...
- java在方法中用来抛出异常关键字的是,在Java语言中以下哪个关键字用于在方法上声明抛出异常()...
在Java语言中以下哪个关键字用于在方法上声明抛出异常() 更多相关问题 [判断题] 现金到账户汇款和账户到账户汇款简称为入账汇款. [单选] 客户办理一笔134.45元按址汇款,附言5个汉字,共应收 ...
- java synthetic_浅谈Java编程中的synthetic关键字
导读 正文 java synthetic关键字.有synthetic标记的field和method是class内部使用的,正常的源代码里不会出现synthetic field.小颖编译工具用的就是ja ...
- 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)...
接前一篇CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南,继续对ELK. logstash官方最新文档https://www.elastic.co/g ...
- java nativearray_Java中的native关键字与JNI
一.先说一下大致的意思: jdk提供的类库源代码中有一些方法没有实现,这些方法前有native关键字,如object类中的 : native Object clone() throwsCloneNot ...
最新文章
- 【 C 】字符串函数专题
- Spring Security-用户密码自定义国密SM2加密
- LeetCode Reorder List
- 【Coursera】经验风险最小化
- c++ hashset的用法_C++中set的用法
- 无障碍开发(二)之ARIA role属性
- 【转载】使用 gnuplot 在网页中显示数据
- JDK5--Annotation学习:基础(二)
- Eclipse常用的快捷方式
- Mock 框架 Moq 的使用
- 解析法实现一元线性回归、多元线性回归以及数据模型可视化操作
- node-webki 基本程序结构
- oracle gg 有两个字段没同步到,GG配置Oracle同步到SQLServer
- 苹果笔记本适合什么人 中国Mac电脑用户的8个事实
- C语言数据结构与算法 项目实战 教学视频(完整)
- dede采集简单好用的织梦采集
- 鹏业安装云算量免费使用,只需这几步
- win10停止更新_win10电脑更新不动的解决方案
- 虚拟化——成功解决使用ovirt安装虚拟机系统时不能正常引导安装
- Linux安装postman工具