Java 异常结构
1、Throwable
Throwable是 Java 语言中所有错误或异常的超类。
Throwable包含两个子类: Error 和 Exception。它们通常用于指示发生了异常情况。
Throwable包含了其线程创建时线程执行堆栈的快照,它提供了printStackTrace()等接口用于获取堆栈跟踪数据等信息。
2、Exception 和 RuntimeException
RuntimeException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。编译器不会检查RuntimeException异常。(例如,除数为零时,抛出ArithmeticException异常。RuntimeException是ArithmeticException的超类。)
3、Error
编译器也不会检查Error。
Java 将可抛出(Throwable)的结构分为三种类型:被检查的异常(Checked Exception),运行时异常(RuntimeException)和错误(Error)。
1、运行时异常 (RuntimeException及其子类都被称为运行时异常)
2、被检查的异常(Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异常)
此类异常,要么通过throws进行声明抛出,要么通过try-catch进行捕获处理,否则不能通过编译。
3、错误(Error类及其子类)
在Java中进行异常处理,对于可能会发生异常的代码,可以选择三种方法来进行异常处理:
1)对代码块用try..catch进行异常捕获处理;
2)在该代码的方法体外用throws进行抛出声明,告知此方法的调用者这段代码可能会出现这些异常,你需要谨慎处理。此时有两种情况:
如果声明抛出的异常是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。
如果声明抛出的异常是运行时异常,此方法的调用者可以选择地进行异常捕获处理。
3)在代码块用throw手动抛出一个异常对象,此时也有两种情况,跟2)中的类似:
如果抛出的异常对象是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。
如果抛出的异常对象是运行时异常,此方法的调用者可以选择地进行异常捕获处理。
(如果最终将异常抛给main方法,则相当于交给jvm自动处理,此时jvm会简单地打印异常信息)
常见需要检查的异常:
- EOFException 文件已结束异常
- FileNotFoundException 文件未找到异常
- SQLException 操作数据库异常
- IOException 输入输出异常
- NoSuchMethodException 方法未找到异常
- ClassNotFoundException
- NamingException
- InterruptedException