在创建自定义例外时

时间:2015-05-23 06:49:26

标签: java custom-exceptions

如何定义java中的异常以及如何定义自己的异常? 例如,我们ArithmeticException禁止我们除以0并且不会破坏程序。

使用try-catch逻辑捕获相同的潜在错误有什么if-else的优势?

此外,假设我不在所有整数的字段中操作,但特别是在Z2添加时形成的字段1+1=0

如果我预先定义了一系列操作逻辑,那么我可以这样做:

try {
    int a = 1;
    int b = 1;
    int c = a/(a+b);
} catch(myError e) {
//
}

其中myError

public class myError extends Exception {
    public myError(String e) {
        super(e);
    }
}

但是,try-catch子句如何知道它应该捕获myError?是什么让myError成为现实? 换句话说:什么定义,例如,ArithmeticException,以寻找除以0之外的其他东西?

或者我可以throw new myError("something's wrong"),但这会打破定义“自定义”异常的全部要点,因为我可以抛出任何这样的异常。

1 个答案:

答案 0 :(得分:1)

异常只是扩展类Throwable的类。通过创建扩展Throwable或其子类之一的类来定义您自己的异常。

您可以使用throw new myError();抛出自己的异常。

ArithmeticException是JVM在除以零时抛出的特殊异常。寻找除以零的地方并不是例外;这是/的工作原理。 /运算符检查分母是否为零,然后抛出异常。

无法向+运算符添加例如检查,以便在添加两个数字的结果为零时抛出任何异常。您必须编写自己的方法来检查并执行此操作。

public int add(int a, int b) {
    int result = a + b;
    if (result == 0) {
        throw new myError();
    }
    return result;
}

// Then use the add() method instead of +
try {
    int a = 1;
    int b = -1;
    int result = add(a, b);
    System.out.println(result);
} catch (myError e) {
    System.out.println("The result was zero!");
}