异常的定义:运行期间出现的错误,而非编译时的语法错误
异常的体系结构:
继承关系:
Object 类的直接子类Throwable描述了所有被虚拟机抛出的非正常状况。一般情况下很少用Throwable,而是使用它的两个子类Error、Exception。
1.Error类特指应用程序在运行期间发生的严重错误。如:虚拟机内存用尽、堆栈溢出等等。一般情况下这种错误都是灾难性的,所以没有必要使用异常处理机制处理Error。
- Exception类有几十个子类,描述了不同类型的异常,其中:
以RuntimeException为代表的一些类,称为非检查性异常(unchecked
Exception),
以IOException为代表的一些类为检查性异常(checked Exception)。所谓的检查和非检查是指编译器 在编译时是否检查。如果代码中存在检查性异常,必须进行异常处理,否则编译时不能通过;而非检查性异常编译时不进行检查,到运行时才会显现。
非检查
检查性
处理机制
Java 中可用于处理异常的两种方式:
1.自行处理:可能引发异常的语句封入在 try 块内,而处理异常的相应语句则封入在 catch 块内。
2.回避异常:在方法声明中包含 throws 子句,通知潜在调用者,如果发生了异常,必须由调用者处理。