- Java把异常作为一种类,当做对象来处理。所有异常类的基类是Throwable类。两大子类分别是Error和Exception。这些异常类可以分为三种类型:错误、受检异常、运行时异常。
- 错误由JVM抛出,用Error类表示。Error类描述的是内部的系统错误,例如Java虚拟机崩溃、内存溢出等。这种情况仅凭程序自身是无法处理的,在程序中也不会对Error异常进行捕捉和抛出。
- 异常(Exception)又分为RuntimeException(运行时异常)和CheckedException(受检异常),两者区别如下:
- RuntimeException:程序运行过程中才出现和被检查出来的错误。例如:类型错误转换,数组下标访问越界,空指针异常、找不到指定类等等。
- CheckedException:来自于Exception且非运行时异常都是检查异常,编译器会强制检查并通过try-catch块来对其捕获,或者在方法头声明该异常进一步交给调用者处理。
- 两种异常的处理原则:
运行时异常:说明代码逻辑写的有问题,是bug、铁定了是程序员的锅,应该找到对应代码并动手改掉,而不是对其捕获;
受检异常:当遵循谁知情谁处理,谁负责谁处理,谁导致谁处理,所谓处理即先对其就地捕获,再做进一步本地化处理。