浅析Java语言中两种异常的差别
时间:2007-12-27 来源:不详 作者:林子
再看下面这个例子:
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)却无法直接捕捉问题并报告出来。 dedecms.com
在程序中捕捉runtime exception还会带来更多的问题:要捕捉哪些runtime exception?什么时候捕捉?runtime exception是不需要声明的,你怎样知道有没有runtime exception要捕捉?你想看到在程序中每一次调用方法时,都使用try/catch程序块吗?
文章评论
共有位Admini5网友发表了评论 查看完整内容