在我开发的其中一个软件中,我正在尝试管理异常机制。
在程序的某个地方,我会做类似的事情;
IF(my condition not allowed){
throw new Exception("My condition not allowed", null)
}
我使用java.lang.exception的参数抛出null,以了解这与编程错误无关。 (我没有机会创建自己的自定义异常,请考虑一下)
在编程之上的某处,我像这样抓住了我的异常;
}catch(Exception e){
if(null == e.getCause)
do.somethingThatIWantToCatch();
}else{
do.somethingProgramaticalError();
}
这里的问题是;我的代码可能抛出一些我不知道的其他东西,如NullPointerException,ArrayIndexOutOfBoundsException等...
此时我希望e.getCause()不应该为null,如果我得到编程错误,但是我总是得到NULL并执行我的do.somethingThatIWantToCatch();条件一直都在。
我该如何处理这种情况并执行我的do.somethingProgramaticalError();条件???
答案 0 :(得分:0)
你应该永远抛出Exception
(或其未经检查的孩子RuntimeException
)的实例。你应该总是找到一个合适的子类来抛出,或者如果还没有合适的子类,你就创建自己的子类。
捕获Exception
将捕获阳光下的每种类型的异常,包括您关注的NullPointerException
以及您不喜欢的其他异常类型。最好尽可能具体地了解您捕获的异常类型,以便不处理您不想无意中处理的其他异常处理。
对于getCause()
,这通常是传递给另一个异常的构造函数的异常。对于您遇到的绝大多数例外情况都是如此。