Checked异常、Unchecked异常:
编译器可帮助检查你的程序是否已抛出或处理了可能的异常(checked异常)必须捕获并指定错误处理器handler,否则编译无法通过;类似于编程语言中的static type checking.
Errors and Runtime Exceptions(unchecked异常)不需要在编译的时候用try…catch等机制处理.
Checked异常的处理机制:声明、抛出、捕获、处理、清理现场、释放资源等:
Declaring exceptions (throws) 声明“本方法可能会发生XX异常”
Throwing an exception (throw) 抛出XX异常
Catching an exception (try, catch, finally) 捕获并处理XX异常,不管程序是否碰到异常,finally都会被执行
Unchecked异常也可以使用throws声明或try/catch进行捕获,但大多数时候是不需要的,也不应该这么做——掩耳盗铃,对发现的编程错误充耳不闻 当要决定是采用checked exception还是unchecked exception的时候,问一个问题:“如果这种异常一旦抛出,client会做怎样的补救?” 如果客户端可以通过其他的方法恢复异常,那么采用checked exception;
如果客户端对出现的这种异常无能为力,那么采用unchecked exception;
异常出现的时候,要做一些试图恢复它的动作而不要仅仅的打印它的信息。错误可预料,但无法预防,但可以有手段从中恢复,此时使用checked exception。如果做不到这一点,则使用unchecked exception.
自定义异常类
如果子类型中override了父类型中的函数,那么子类型中方法抛出的异常不能比父类型抛出的异常类型更宽泛。子类型方法可以抛出更具体的异常,也可以不抛出任何异常。如果父类型的方法未抛出异常,那么子类型的方法也不能抛出异常。