在java程序设计语言中,异常对象都是派生于Throwable类的一个实例。如果java内置的异常类不能满足需要,用户还可以创建自己的异常类。
Throwable 类的两个子类, Error和 Exception, Error类层次结构描述了java运行时虚拟机的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象,如果出现这种内部错误,除了通知用户,并尽力使程序安全的终止外,再也无能为力。所以,很少出现Error异常。
java程序设计的时候,更需要关注Exception的层次结构,这个层次结构分解为两个分支:一个分支是派生于RuntimeException的异常,另一个分支包含其他异常。由程序
错误导致的异常属于RuntimeException(一般是由程序逻辑出错,且一定会出错); 曾经能够正确运行,而由于某些情况(例如, io错误)导致的异常不属于RuntimeException.
生于RuntimeException的异常包括:
(1)错误的类型转换
(2)数组访问越界
(3)访问空指针
不是派生于RuntimeException的异常包括:
(1)视图在文件尾部后面读取数据
(2)视图打开一个错误格式的URL
(3)视图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在
java语言规范将派生于RuntimeException类或Error类的所有异常成为“未检查”异常(即程序逻辑出错或可能的虚拟机出错,这只有在运行时才能知道),其他的异常称为“已检查异常”。编译器将核查是否为所有的已检查异常提供异常处理器。i一般在编写java程序时,编译器强制要求你添加 try catch处理的异常为 “已检查”异常,他们有编译器进行保证捕获。