ERROR,一般由虚拟机抛出,例如OOM、系统中的内部错误以及资源耗尽的情形。这种情形程序员不用抛,想抛也抛不了。。
Exception,是所有异常的大爷(父类),这里我将他简单的划分为:RuntimeException和non-RuntimeException。(前者称为unchecked异常,后者称为checked异常)
RuntimeException体系,一般都是程序员的错。例如,错误的类型转换、数组越界访问和试图访问空指针等等。
- 这种异常,不catch的话,eclipse不会报错,异常会一直往上抛,直到线程停掉。用于调试,挺好的。
- 当然也可以catch,进行些处理。无视自己已经酿成的错误,呵呵,这样会不会有点鸵鸟了?
- 程序员可以自己在代码中,多加些判断,检查数组下标和数组边界来避免数组越界访问等。
non-RuntimeException体系
- 这类异常,往往是外部因素引起的,非程序员本身错误。例如,试图从文件尾后读取数据等
- 要抛,且必须要在某层捕捉住。
RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。遇到Error,程序员一般无能为力。遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改。
checked异常是由程序员抛出的,这分为两种情况:程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。
覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。
http://hi.baidu.com/ailongni/blog/item/ce75c734ec11cb1990ef3988.html