1.异常层次结构
Java中,异常对象都是派生于Throwable类的一个实例。下图是异常层次结构:
源自Core Java(Volume I--Fundamentals 9th Edition) (1)
派生于Error和RuntimeException的所有异常称为未检查(unchecked)异常,所有其他的异常称为已检查(checked)异常。
在unchecked异常中,Error类层次描述了Java运行时系统的内部错误和资源耗尽情况,程序员无法控制(these errors are abnormal conditions that should never occur)。继承自RuntimeException的异常,常见的比ArithmeticException, IllegalArgumentException, NullPointerException,IndexOutOfBoundsException等,都是程序员应该避免发生的异常。所以,应用程序不应该抛出unchecked异常。
此外,方法中所有可能抛出的checked异常都必须声明,否则会出编译错误。
2.继承中重写方法时的异常处理
1)子类重写父类方法要抛出(throws)与父类一致的异常,或者不抛出异常
2)子类重写父类方法所抛出(throws)的异常不能超过父类的范畴
不允许在子类throws中出现超过父类方法所列的异常类范围。注意:捕获与抛出是两个概念,捕获是自己处理,抛出是不知道怎样处理,将异常进行传递