异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如,希望用户输入一个int类型的年龄,但是用户的输入是abc:
所以,一个健壮的程序必须处理各种各样的错误。错误就是程序调用某个函数的时候,如果失败了,就表示出错。
调用方获知调用失败的信息有两种方法:
方法一:返回错误码。
比如,处理一个文件,如果返回0,表示成功,返回其他整数,表示约定的错误码:
方法二:在语言层面上提供一个异常处理机制。
Java内置了一套异常处理机制,总是使用异常来表示错误。
异常是一种class,因此它本身带有类型信息。异常可以在任何地方抛出,但只需要在上层捕获,这样就和方法调用分离了:
Throwable是异常体系的根,它继承自Object。Throwable有两个体系:Error和Exception,Error表示严重的错误,而Exception则是运行时的错误,它可以被捕获并处理。
Exception又分为两大类:
第一类:RuntimeException以及它的子类;
第二类:非RuntimeException(包括IOException、ReflectiveOperationRuntimeException等等)
Java规定了必须捕获的异常,包括Exception及其子类,但不包括RuntimeException及其子类,这种类型的异常称为Checked Exception。
Java还规定了不需要捕获的异常,包括Error及其子类,RuntimeException及其子类。