0

我在Java中有一个基本问题:

我有两种方法:functionA& functionBfunctionA调用functionB,并functionB引发异常。调用functionB在 try 范围内functionA

现在我也希望functionA它能够捕获范围。

有什么办法吗?

4

3 回答 3

2

如果抛出异常methodB并且您捕获它,则将其传播到的一种方法methodA是重新抛出它:

void methodB() throws SomeException {
    try {
        //Something that can throw SomeException
    } catch (SomeException e) {
        //rethrow e
        throw e;
    }
}

void methodA() {
    try {
        methodB();
    } catch (SomeException e) {
        //this block will run if methodB throws SomeException
    }
}

但是,如果您需要,您可能根本不应该捕获异常,methodB而让它自动传播到methodA

void methodB() throws SomeException {
    //Something that can throw SomeException: don't catch it
}

void methodA() {
    try {
        methodB();
    } catch (SomeException e) {
        //this block will run if methodB throws SomeException
    }
}
于 2012-08-05T08:51:35.377 回答
0

实际上,这就是它通常的工作方式,只要它functionB本身没有捕获异常。抛出异常时,会在调用堆栈中冒泡,直到catch找到匹配的块。

于 2012-08-05T08:56:24.770 回答
0

不确定这是否是您想要的

 void functionB() throws MyException {
 try{
 .....
}Catch(MyException e){
//do something here;
 throw e;
}
}

void functionA() {
try {
    functionB();
} catch (MYException e) {
    //do something else to A here
}
}
于 2012-08-05T09:00:31.963 回答