# 异常

Java中,所有的异常都有一个共同的祖先java.lang包中的Throwable类。Throwable有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类,各自包含大量的子类。异常和错误的区别:异常能被程序本身处理,错误是无法处理的。

# Error(错误)

是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误表示代码运行时JVM(Java虚拟机)出现的问题,例如JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些错误表示故障是发生于虚拟机自身或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误在运行前是不可查的。

# Exception(异常)

是程序本身可以处理的异常Exceptiton类有一个重要的子类RuntimeException。除此之外,还有NullPointerExceptionArrayIndexOutOfBoundsException等。

# Runtime Exception(运行时异常) Uncompleted

# Throwable类常用方法

  • public string getMessage():返回异常发生时的简要描述
  • public string toString():返回异常发生时的详细信息
  • public string getLocalizedMessage():返回异常对象的本地化信息。如果Throwable的子类有覆盖这个方法,则可以生成本地化信息。如果子类没有覆盖这个方法,则方法返回的信息与getMessage()返回的结果相同
  • public void printStackTrace():在控制台上打印Throwable对象封装的异常信息

# 总结

  • try块:用于捕获异常,其后可以接多个catch块或者不接。如果其后没有catch块,则必须跟一个finally块
  • catch块:用于处理try捕获到的异常。
  • finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。如果在try块或者catch块中有return语句,则在return返回之前执行finally语句

有四种特殊情况下,finally块不会执行:

  1. finally语句块第一行发生了异常。
  2. 在前面的代码中使用了System.exit()退出程序。
  3. 程序所在的线程死亡。
  4. 关闭CPU。