background image

 
int [] numbers = { 1, 2, 3 };
  int sum = numbers[0] numbers[3];
  }
  在运行方法 method()时会遇到 ArrayIndexOutOfBoundsException(因为数组
numbers 的成 员是 从 0 到 2)。 对于 这个 异常 ,调 用方 无法 处理 /纠 正。 这个 方法
method()和上面的 method2()一样,都是 runtime exception 的情形。上面我已经提
到,runtime exception 用来指示一种调用方本身无法处理/恢复的程序错误。而程序错
误通常是无法在运行过程中处理的,必须改正程序代码。
  总而言之,在程序的运行过程中一个 checked exception 被抛出的时候,只有能够
适当处理这个异常的调用方才应该用 try/catch 来捕获它。而对于 runtime exception,
则不应当在程序中捕获它。如果你要捕获它的话,你就会冒这样一个风险:程序代码的错
误(bug)被掩盖在运行当中无法被察觉。因为在程序测试过程中,系统打印出来的调用堆
栈路径(StackTrace)往往使你更快找到并修改代码中的错误。有些程序员建议捕获
runtime exception 并纪录在 log 中,我反对这样做。这样做的坏处是你必须通过浏览
log 来找出问题,而用来测试程序的测试系统(比如 Unit Test)却无法直接捕获问题并报
告出来。
    在 程 序 中 捕 获 runtime exception 还会带来更多的问题 : 要捕获哪些 runtime 
exception?什么时候捕获?runtime exception 是不需要声明的,你怎样知道有没有
runtime exception 要捕获?你想看到在程序中每一次调用方法时,都使用 try/catch 程
序块吗?