Java中异常的处理及捕获

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Java中异常的处理及捕获

一、异常的概述

1Java中异常的作用增强程序的健壮性
2在Java中所有的Error错误和异常Exception都继承了同一个父类Throwable
在这里插入图片描述

二、异常产生的原因Java异常的种类

在Java中异常产生主要有三种原因
1程序内部错误所产生的异常。比如数组越界(ArrayIndexOutOfBoundsException)、空指针异常(NullPointerException)等这种异常叫做非受检异常这类异常不需要在代码中声明抛出但需要在类中处理这些异常。
运行时异常(RuntimeException)下的各类异常都属于非受检异常
2通过throw(抛出异常)语句手动生成的异常这种异常叫做受检异常。受检异常这种异常在编译时就可以被检测出来必须在代码中进行处理或者声明抛出否则编译不通过。例如IOExceptionFileNotFoundExceptionClassNotFoundExceptionSQLException等。
3Error这类异常通常是由Java虚拟机jvm或硬件引起的。比如OutOfMemoryErrorStackOverFlowError等。

三、异常的处理

3.1异常的抛出throw

1、throw是将异常抛给调用者由其调用者来对异常信息进行处理。在编写程序时如果程序中出现错误这就需要将异常信息通知给调用者这里就可以借助关键字throw抛出一个指定的异常对象将错误信息告知给调用者。
2、throw必须写在方法体内且一旦出现异常后面的代码就不会执行。
在这里插入图片描述
在这里插入图片描述

3、如果抛出的是编译时异常(受检异常)咱就必须得处理掉这个异常否则无法通过编译。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

如果抛出的是运行时异常(非受检异常)则可以不用处理直接交给jvm来处理。其实最好要是能处理的话还是处理一下子
在这里插入图片描述
在这里插入图片描述

3.2异常的捕获

3.2.1 throws捕获异常

throws处在方法声明参数列表之后当方法抛出编译时异常而你又不想处理该异常此时就可借助throws将异常抛给方法的调用者来处理。
1、格式
修饰符 返回值类型 方法名(参数列表) throws 异常类型 {
}
在这里插入图片描述

2、如果说方法内抛出多个异常throws之后就必须跟多个异常类型用逗号进行分隔
在这里插入图片描述

3、如果抛出多个异常有父子关系直接声明父类
在这里插入图片描述

4、调用声明抛出异常的方法时调用者必须对该异常进行处理或者继续使用throws抛出。
在这里插入图片描述

3.2.2、try-catch捕获异常并处理

1、当程序抛出异常的时候我们可以通过try-catch对异常进行捕获处理。
在这里插入图片描述
在这里插入图片描述

2、需要明确如果程序抛出的异常不做处理那就会交给jvm来处理jvm处理就会把程序立即终止。这样我们就明白了使用try-catch进行异常捕获时必须捕获对应的异常如果捕获的不是对应的异常也会让jvm进行处理。
在这里插入图片描述
在这里插入图片描述

4、如果try抛出多个异常就必须用多个catch进行捕获这里注意用多个catch进行捕获不是同时进行捕获因为不能同时抛出不同的异常。
在这里插入图片描述

也可简写成如下
在这里插入图片描述
在这里插入图片描述

5、如果异常之间有父子关系那就必须子类异常在前父类异常在后catch不然会报错。
在这里插入图片描述

3.2.3、finally

1、finally不管程序正是否抛出异常finally都会被执行。
2、finally用于进行资源回收或是一些收尾的操作无论程序正常进行还是退出都需要回收资源。
情况一引发异常时finally会被执行。
在这里插入图片描述
在这里插入图片描述

情况二程序段正常结束后finally下的语句也会被执行
在这里插入图片描述
在这里插入图片描述

3、即使有returnfinally也会被执行。
在这里插入图片描述
在这里插入图片描述

4、总结
throw抛出异常throws声明异常并捕获try-catch捕获异常
finally语句一定会执行

3.3自定义异常类

虽然Java中有很多异常类但是在开发中我们会遇到很多异常不能完全表示这就需要我们通过自定义的异常类进行解决。
上代码
首先自定义异常类MyException
在这里插入图片描述

抛出自定义异常类并进行捕获处理
在这里插入图片描述
在这里插入图片描述

自定义异常类的总结
自定义异常类默认会继承Exception或者RuntimeException
继承于Exception的异常默认是受检异常
继承于RuntimeException的异常默认是非受检异常

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注意处理继承Exception受检的自定义异常时必须对抛出的异常进行捕获处理否则无法编译通过。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java