Java语言中的两种异常(二)

2014-11-24 01:08:55 · 作者: · 浏览: 1
mbers[3];
}

public void method()
   {

   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程序块吗?