10.异常处理

Java 异常处理

异常就是在程序执行过程中出现的一种会导致正常执行逻辑改变的事件。方法在执行过程中遇到“错误”时,会创建一个异常对象并将它交给运行时系统。异常对象包含了异常的类型及程序在异常抛出时的状态。创建异常并将异常交给运行时系统的过程叫 抛异常 throwing an exception。异常在抛出后,运行时系统会在调用栈中按反方向寻找能处理该异常的代码块。能处理异常的代码块叫 exception handler。异常发生的原因有很多,通常包含以下几大类:

  • 用户输入了非法数据。
  • 要打开的文件不存在。
  • 网络通信时连接中断,或者 JVM 内存溢出。
  • 这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。-

异常和错误都继承自 Throwable, 异常中除了 RuntimeException 及其子类外,都为受检异常(CheckedException)。受检异常的抛出必须要方法签名中通过 throws 来声明,实际上他们是方法签名的一部分。要理解 Java 异常处理是如何工作的,你需要掌握以下三种类型的异常:

  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。