Java7优化前后的try catch处理概述

334 阅读3分钟

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

前言

大家好,我是程序猿小白 gw_Gw,很高兴能和大家一起学习进步。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍Java异常处理中的try catch处理和finally的用法以及Java7对try catch处理的优化的一些基本语法。

1. try catch和finally的使用

1.1 try catch使用

Java中的异常分为Checked异常和Runtime异常。我们通常不必处理Runtime异常,但是JVM会强制我们处理Checked异常。并且为我们提供了try catch语句来处理异常。

格式如下:

try{
    //可能会发生异常的语句
​
}catch(Exception1 e){
    //异常处理
}
catch(Exception2 e){
//异常处理
}
finally{
    //一定会执行的语句,通常用来关闭资源文件
}

我们把可能发生异常的语句放到try块中,并在catch中捕获该异常,如果发生了该异常就进入到对应的catch块中处理。如果发生了异常,却找不到对应的catch块来处理,那JVM就会强制退出程序。

所以一个try块可以对应多个catch处理。也可以没有catch块,但是这种情况一定要有finally块。

也就是说一个try块,至少有一个catch或者没有catch,但有一个finally块,亦或者两个都有。

如果有多个catch块,那么JVM只会执行按顺序执行第一个满足的catch块。因此在书写catch块时也有规定,上面的catch块处理的异常的范围要小于等于下面的catch块处理的异常范围,也就是说上面的异常是下面的异常的孩子或者兄弟,否则会报错。

1.2 finally使用

除非在try catch块中执行了退出了虚拟机的方法(System.exit(1)),否则在finally中的代码一定会执行,哪怕在前面遇到了return。

所以我们通常在finally块中关闭资源文件,来确保资源文件被关闭。但是要尽量避免不要在finally块中执行return或throw语句,这会导致try,catch块中的return和throw语句失效。(因为finally一般都会执行,会覆盖掉try catch中的内容)

1.3 被Java7优化的异常处理

Java7对异常处理进行了优化:

  • 多异常捕获
  • 自动关闭资源的try语句

1.3.1 多异常捕获

Java以前,一个catch只能捕获一种异常,而Java7规定一个catch可以捕获多种异常,使用“|”分割即可。但是在多异常捕获时,异常变量被隐式的final修饰,因此不能对异常变量重新赋值。

1.3.2 自动关闭资源的try语句

Java7出现了一种新语法用来关闭资源文件。

语法格式:

try(
    //这里是打开资源的语句,可以有多个;
    语句1;
    语句2//最后一条语句不加分号
){
​
}

这种写法可以没有catch和finally,因为已经隐含了finally块在里面。

小结

以上就是对Java异常处理中的try catch处理和优化后的try catch处理的一些基本用法,希望对读者有所帮助,如有不正之处,欢迎留言评论。