创建自定义异常

时间:2013-05-14 23:38:59

标签: java exception-handling throws

我正在尝试创建一个方法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)。任何有关如何解决此问题的帮助以及编写异常的任何技术都值得赞赏。

1 个答案:

答案 0 :(得分:1)

因为f1抛出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");
    }
}