考虑两种情况case1和case2以及两种方法method1和method2。假设method1解决case1而method2求解case2。现在,我有一个可能以case1或case2结束的程序。在我的代码中,无论发生什么情况,我都会调用method1。但是,如果发生case2,则method1给出nullpointerexception。
我想要的是以下内容:我的代码应首先调用method1,如果发生异常,则调用method2。我该怎么办?由于我没有关于尝试和捕获的信息,我真的需要一些帮助!
答案 0 :(得分:3)
你可以这样做:
try {
method1();
}
catch ( Exception e ) {
method2();
}
尽管如此,通常只有在特殊情况下依赖异常才会更好。对于正常的控制流,您可以使用if:
if ( isCase2() ) {
method2();
}
else {
method1();
}
答案 1 :(得分:2)
捕捉NullPointerException
是一个糟糕的实践 - 你可能没有抓住你想要抓住的特殊例外。您有两种选择:
1)抛出你自己的异常并稍后抓住它:
public void method1(Case caze) throws MyException {
if (case.getType() == CaseType.CaseOne) {
// processing
} else {
throw new MyException("Wrong case type");
}
}
客户端代码:
try {
method1(caze);
} catch (MyException e) {
// log the excpetion
method2(caze);
}
2)返回一个布尔标志,表示处理已成功完成。
请记住,分析值比使用try-catch机制更好。我会为你建议变种#2。