异常
Throwable 可以用来表示任何可以作为异常抛出的类,分为两种: Error 和 Exception。其中 Error 用来表示 JVM 无法处理的错误,Exception 分为两种:
受检异常(checked exception):需要用 try…catch… 语句捕获并进行处理,并且可以从异常中恢复。
非受检异常 (unchecked exception/RuntimeException):是程序运行时错误。
其处理方式有:- 捕获
- 继续抛出
- 不处理
若想区分受检异常和非受检异常,记住两点:异常是 Throwable 对象,而且异常主要分为两类,通过 Error 和Exception 子类标识。只要异常对象是 Error 类,就是非受检异常。Exception 类还有一个子类RuntimeException,RuntimeException 类的所有子类都属于非受检异常。除此之外,都是受检异常。
异常的分类:
java.lang.Throwable
Error 错误:JVM 内部的严重问题。无法恢复。程序人员不用处理。
Exception 异常:普通的问题。通过合理的处理,程序还可以回到正常执行流程。要求编程人员要进行处理。
RuntimeException(运行时异常): 也叫非受检异常 (unchecked exception). 这类异常是编程人员的逻辑问题。应该承担责任。Java 编译器不进行强制要求处理。 也就是说,这类异常再程序中,可以进行处理,也可以不处理。
checked exception(受检异常): 这类异常是由一些外部的偶然因素所引起的。Java 编译器强制要求处理。也就是说,程序必须进行对这类异常进行处理。
常见异常:
非受检的:NullPointerException,ClassCastException,ArrayIndexsOutOfBoundsException,ArithmeticException (算术异常,除 0 溢出)
受检:Exception,FileNotFoundException,IOException,SQLException.
异常抛出
- throws 用于抛出方法层次的异常,例如: public void test() throws SQLException, IOException {}
- throw 关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。