0

我正在尝试创建一个f1(x)在 x 等于 5 时引发异常的方法。之后,我将尝试从另一个方法调用该方法f2()来调用该异常。然后我必须f2()通过调用来恢复f1(x+1)。我尝试编码一些东西,但我被卡住了。这是代码:

public class FiveException extends Exception {

public void f1(int x) throws FiveException {
    if (x == 5) {
        throw new FiveException();
    }
}

public void f2() {
    int x = 5;
    try {
        f1(x);
    }catch (FiveException e) {
        System.out.println("x is 5");
    }

}


public static void main(String[] args) {
    FiveException x5 = new FiveException();
    x5.f2();
}

}

print 语句有效,但我不确定如何调用f(x+1). 感谢您提供有关如何解决此问题以及编写异常的任何技术的任何帮助。

4

1 回答 1

1

因为f1throws FiveException,无论您在哪里调用f1,都必须捕获异常或将其抛出到调用引发异常的方法的方法中。例如:

public static void main(String[] args) throws FiveException {
    FiveException x5 = new FiveException();
    x5.f1(1);
}

或者:

public static void main(String[] args) {
    FiveException x5 = new FiveException();

    try {
        x5.f1(1);
    } catch (FiveException e) {
        e.printStackTrace();
    }
}

但是您的代码令人困惑......通常,它不是抛出自身的异常类,您还有其他抛出异常类的类。

如果在 catch 语句中调用它,则必须用另一个 包围它try-catch,因为里面的代码catch不受保护,如下所示:

public void f2() {
    int x = 5;
    try {
        f1(x);
    }catch (FiveException e) {
       System.out.println("x is 5");
       try {
           f1(x + 1);
       } catch (FiveException e) {
           e.printStackTrace();
       }
    }
}

但是这段代码很难看,可以这样写:

public void f2() {
    int x = 5;
    fProtected(x);
    fProtected(x + 1);
}

private void fProtected(int x) {
    try {
        f1(x);
    }catch (FiveException e) {
       System.out.println("x is 5");
    }
}
于 2013-05-14T23:57:06.263 回答