在程序运行过程中,如果产生错误,则抛出异常;
通过try语句来定义代码块,运行可能抛出异常的代码;
通过catch语句来捕获特定的异常并做相应的处理;
通过finally语句可以保证即使产生异常(处理失败),也可以在事后清理资源等
1、Java异常类层次结构图
2、错误异常类
Error类和其子类通常用于程序无法处理的错误,这些异常发生时,Java虚拟机一般会在控制台打印相应的错误信息,并终止程序的进行
3、运行时异常类
RuntimeException类及其子类,一般是由程序逻辑错误引起
例:ClassCastException、IllegalArgumentException、ArithmeticException、NumberFormatException
4、非运行时异常类
除 RuntimeException类及其子类,它是必须处理的异常,若不处理程序不能编译通过
例:java.io.IOException、ClassNotFoundException、java.io.FileNotFoundException
5、非检测异常
包括错误异常类和运行时异常类,非检测异常一般属于系统错误,调用可能产生非检测异常的代码时可以不使用try…catch处理
6、检测异常
包括非运行时异常类,强制使用try…catch处理,若没有则会产生编译错误
7、自定义异常类
归类于非运行异常类,一般定义为可检测异常,自定义异常类一般包括俩个构造方法,一个是默认构造方法,一个是带String参数的构造方法
8、捕获处理异常
try语句三种形式
(1)try…catch,捕获处理异常
(2)try…finally
(3)try…catch…finally可以有多个catch
9、使用catch语句捕获异常时,派生程度最高的异常类的catch块需放置在最前面,否则产生编译错误,后面的异常永远无法匹配;捕获不可能产生的异常也会产生编译错误;catch只能捕获try块中包含的语句可能引发的所有可检测异常 ;如果部分可检测异常没有使用catch捕获处理,则需要在方法的声明中使用throws语句抛出这些可检测异常
10、重新抛出运行时非检测异常时不需要在方法头部使用throw关键字声明方法可能抛出异常类型,重新抛出可检测异常时需要在方法头部使用throw关键字声明方法可能抛出异常类型
11、抛出异常
(1)Java虚拟机自动抛出异常,比如除数为0,抛出java.long.ArithmeticException
(2)程序代码抛出异常