在Java代码中,异常大家都不会陌生,今天我们谈谈异常的滥用。
Java的异常分为两类:RuntimeExecption, Exception。
RuntimeException算是一种运行时错误,这些异常可以通过代码处理避免的。如著名的NullPointerException,我们可以通过判断对象是否等于null来避免抛出此异常。
而Exception更多的算是一种代码中的异常分支,是无法通过代码处理来避免的,如IOException,IO操作被中断,属于一种正常的代码处理。
或者,从最终用户的角度来说,Exception是一种用户看得到的能明白的,异常分支处理;而RuntimeException用户是理解不了的,是给机器或程序员用的。
不过,现在很多同学们写代码,为了图方便,把异常滥用了。
我们看一段典型的代码:
package test.unit;
public class ExceptionExample {
public void catchException(){
try{
System.out.println(“There is no exception.”);
//do someting more ….
}catch(Exception e){
e.printStackTrace();
}
}
public void catchRunTimeException(){
try{
System.out.println(“There is no runtimeexception.”);
//do someting more ….
}catch(RuntimeException e){
}
}
public void catchError(){
try{
System.out.println(“There is no runtimeexception.”);
//do someting more ….
}catch(RuntimeException e){
e.printStackTrace();
}
}
}
上面这段代码,是一个示意,实际应用要复杂一些,但是对异常的处理,实际代码中确实有这么写的。
我在我们项目中就发现不少这种的代码。
这种代码,相当于给代码逻辑中增加了不确定性。
你不知道什么时候会执行到异常分支,且单元测试也永远无法覆盖,不论你怎样moke他。
某种条件下执行到了此分支,也不能提示明确的错误信息给用户。
这种代码,相当于把逻辑交给了魔鬼,无法预测。
本文链接:http://www.yunweipai.com/1560.html
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/53164.html