Bootstrap

Java异常类的层次

异常类的层次

throwable

所有的异常类是从 java.lang.Exception 类继承的子类。
异常分成两种: Error和Exception。

ERROR

Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
Error 用来指示运行时环境发生的错误。
例如,JVM 内存溢出。一般地,程序不会从错误中恢复。

错误不是异常,而是脱离程序员控制的问题。在编译期也检查不到,错误在代码中通常被忽略。

Exception

而Exception分为运行时异常(RuntimeException)和非运行时异常。

异常类有两个主要的子类:IOException 类和 RuntimeException 类。

unchecked exception(非检查异常):

也称运行时异常,是RuntimeException其子类的异常,比如常见的NullPointerException、IndexOutOfBoundsException。
对于运行时异常,java编译器不要求必须进行异常捕获处理或者抛出声明。

checked exception(检查异常,编译异常):

也称非运行时异常(运行时异常以外的异常就是非运行时异常),java编译器强制程序员必须进行捕获处理,这些异常在编译时不能被简单地忽略。
非运行时异常是RuntimeException以外的异常。如:IOException、SQLException等。
最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了。

throw / throws

如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。
也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

finally关键字

finally 关键字用来创建在 try 代码块后面执行的代码块。
无论是否发生异常,finally 代码块中的代码总会被执行。
在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
finally 代码块出现在 catch 代码块最后。

自定义异常

所有异常都必须是 Throwable 的子类。
如果希望写一个检查性异常类,则需要继承 Exception 类。
如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

注意
异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。

;