如果有一个带有多个catch-blocks的try-catch,是否有办法重新抛出下一个(不是底层)catch-clause的异常?
示例:
try {
// some exception can occur here
} catch (MyException ex) {
// do something specific
// rethrow ex to next catch
} catch (Exception ex) {
// do logging stuff and other things to clean everything up
}
当抛出MyException
时,我想处理该异常的特定内容,但后来我想处理一般的异常(catch (Exception ex)
)。
我不想使用finally-block和Java 7 Multi-catch在这里也没有帮助。
任何想法如何处理这个,我想避免每个catch块中的冗余东西。是否最好只捕获Exception
,然后使用instanceof
作为我的特定内容?
感谢。
答案 0 :(得分:4)
public void doStuff()
{
try
{
// some exception can occur here
} catch (MyException ex){
// do something specific
cleanupAfterException(ex);
} catch (Exception ex) {
cleanupAfterException(ex);
}
}
private void cleanupAfterException(Exception ex)
{
//Do your thing!
}
我认为这样的事情可以吗?
答案 1 :(得分:2)
你可能想尝试这样的事情:
try
{
}
catch(Exception ex)
{
if(ex instanceof MyException)
{
// Do your specific stuff.
}
// Handle your normal stuff.
}
答案 2 :(得分:1)
您可以嵌套try
语句:
try {
try {
// some exception can occur here
} catch (MyException ex) {
// do something specific
// rethrow ex to next catch
}
} catch (Exception ex) {
// do logging stuff and other things to clean everything up
}
虽然我担心这是你说“(不是底层)”的意思吗?
答案 3 :(得分:0)
您可以尝试多次尝试捕获:
try {
} catch(MyException ex) {
try {
} catch(Exception ex) {
}
}
答案 4 :(得分:0)
当然这是函数的用途吗?
try {
doStuff();
} catch ( MyException e ) {
doMyExceptionStuff();
doGeneralExceptionStuff();
throw e;
} catch ( Exception e ) {
doGeneralExceptionStuff();
}