Java学习笔记-Java异常

Java学习笔记-Java异常
所有异常都是由Throwable继承而来,但是在下一层即分为了Error和Exception。

  • Error类层次结构描述了Java运行时系统的内部错误或者资源耗尽错误,应用程序不应该抛出这种类型的对象。如果出现这样的内部错误,除了通知给用户并尽力使得程序安全的终止外,再也无能为力了。这种情况很少出现。
  • Exception层次又分为两个分支,一个是RuntimeException,另一个分支包含其他异常。由程序错误导致的异常是RuntimeException;而程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其他异常。

派生于RuntimeException的异常包含下面几种情况:

  • 错误的类型转换
  • 数组访问越界
  • 访问NULL指针

不是派生于RuntimeException的异常包括:

  • 试图在文件尾部后面读取数据
  • 试图打开一个不存在的文件
  • 试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。(反射)

“如果出现RuntimeException,那么一定是你的问题”,是一条相当有道理的规则。

Java语言规范将派生与Error类和RuntimeException类的所有异常称为非受检异常,所有其他的异常称为受检异常。

一个方法必须声明所有的受检异常并捕获处理(使用try catch finally或throws或throw)
而非受检异常要么不可控(Error),要么就应该避免发生(RuntimeException)。

异常的捕获、抛出和异常处理是维持代码健壮性的重要条件。灵活使用异常及处理,不仅能最大限度的避免出错,也能增加软件的容错机制。