解析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关键字相关推荐

  1. Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别常见的几种异常

    Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别 一.概述 在java异常体系中,要打印异常信息,可以通过:e.getMess ...

  2. java异常中的Error和Exception的区别是什么?

    java异常中的Error和Exception的区别是什么? 参考文章: (1)java异常中的Error和Exception的区别是什么? (2)https://www.cnblogs.com/Tr ...

  3. java学习中,instanceof 关键字 和 final 关键字、值的传递(java 学习中的小记录)...

    java学习中,instanceof 关键字 和 final 关键字.值的传递(java 学习中的小记录)作者:王可利(Star·星星) instanceof 关键字 作用: 1.用来判断某个对象是否 ...

  4. java异常中的finally(一)

    java异常中的finally(一) 参考文章: (1)java异常中的finally(一) (2)https://www.cnblogs.com/liaoxiaolao/p/9586134.html ...

  5. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)

    写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持) 参考文章: (1)写给大忙人的ELK最新版6.2.4学习笔记-Logstash ...

  6. java在方法中用来抛出异常关键字的是,在Java语言中以下哪个关键字用于在方法上声明抛出异常()...

    在Java语言中以下哪个关键字用于在方法上声明抛出异常() 更多相关问题 [判断题] 现金到账户汇款和账户到账户汇款简称为入账汇款. [单选] 客户办理一笔134.45元按址汇款,附言5个汉字,共应收 ...

  7. java synthetic_浅谈Java编程中的synthetic关键字

    导读 正文 java synthetic关键字.有synthetic标记的field和method是class内部使用的,正常的源代码里不会出现synthetic field.小颖编译工具用的就是ja ...

  8. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)...

    接前一篇CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南,继续对ELK. logstash官方最新文档https://www.elastic.co/g ...

  9. java nativearray_Java中的native关键字与JNI

    一.先说一下大致的意思: jdk提供的类库源代码中有一些方法没有实现,这些方法前有native关键字,如object类中的 : native Object clone() throwsCloneNot ...

最新文章

  1. 【 C 】字符串函数专题
  2. Spring Security-用户密码自定义国密SM2加密
  3. LeetCode Reorder List
  4. 【Coursera】经验风险最小化
  5. c++ hashset的用法_C++中set的用法
  6. 无障碍开发(二)之ARIA role属性
  7. 【转载】使用 gnuplot 在网页中显示数据
  8. JDK5--Annotation学习:基础(二)
  9. Eclipse常用的快捷方式
  10. Mock 框架 Moq 的使用
  11. 解析法实现一元线性回归、多元线性回归以及数据模型可视化操作
  12. node-webki 基本程序结构
  13. oracle gg 有两个字段没同步到,GG配置Oracle同步到SQLServer
  14. 苹果笔记本适合什么人 中国Mac电脑用户的8个事实
  15. C语言数据结构与算法 项目实战 教学视频(完整)
  16. dede采集简单好用的织梦采集
  17. 鹏业安装云算量免费使用,只需这几步
  18. win10停止更新_win10电脑更新不动的解决方案
  19. 虚拟化——成功解决使用ovirt安装虚拟机系统时不能正常引导安装
  20. Linux安装postman工具

热门文章

  1. 开启系统保护/创建系统还原点 - Win10
  2. Bravo, Dreamworks
  3. ubuntu20安装stunnel
  4. ajaxsubmit怎么显示加载中_电脑绝技教你怎么优化第一宇宙Visual Studio编辑器性能...
  5. 讲一下iptables
  6. mac  下safari如何快速删除书签/收藏
  7. 【ArcGIS自定义脚本工具】栅格统计频率和累计频率
  8. 登录页面中记住密码操作的实现
  9. stty icanon
  10. TestLink导出用例转换工具(XML2Excel)