0

这是一个代码示例。如果我要输入分子:5 和分母:0

我得到一个这样的例外:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at ExceptionHandling.DivideByZeroExceptions.quotient(DivideByZeroExceptions.java:10)
at ExceptionHandling.DivideByZeroExceptions.main(DivideByZeroExceptions.java:22)

我知道我必须包含(抛出算术异常)但是,我怎么知道我需要使用 inputMismatchException?

 // Try DivideByZeroExceptions

  public class DivideByZeroExceptions {

public static int quotient(int numerator, int denominator) {
    return numerator / denominator;
}

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    System.out.println("Please enter an integer numerator: ");
    int numerator = input.nextInt();
    System.out.println("Please enter an integer denominator: ");
    int denominator = input.nextInt();

    int result = quotient(numerator, denominator);
    System.out.printf("\nResult: %d / %d = %d\n", numerator, denominator,
            result);

}

}

4

3 回答 3

2

不确定您对 inputMismatchException 的确切要求,但这是您应该做的:

public static int quotient(int numerator, int denominator) {
    if(denominator == 0)
        throw new IllegalArgumentException("Cannot divide by 0!");
    return numerator / denominator;
}

IllegalArgumentException延伸RuntimeException,不只是Exception. 因此,它只会在线程发生后停止执行,因此不需要捕获/抛出它(当然,您仍然可以在方法之外捕获它以防止线程停止)。

于 2012-09-02T20:52:04.073 回答
2

ArithmeticException和都是InputMismatchException未经检查的异常( 的子类型RuntimeException)。这意味着您不需要抓住或扔掉它们,但是,您需要处理导致它们的情况。

例如,为了避免DivideByZeroException( ArithmeticException) 您的程序必须检查分母是否不为零。如果是,请不要进行除法。

于 2012-09-02T20:54:02.960 回答
1

您不必RuntimeExceptions在 throws 子句 (vg, NullPointerException) 中声明派生的异常。这就是为什么编译器没有告诉您必须声明它的原因(对于其他异常,您将收到编译器错误/IDE 将在方法声明中发出错误信号)。

当然,如果您调用的方法之一可能会抛出它,您可以将其作为任何其他异常捕获。

检查运行时异常

于 2012-09-02T20:51:04.487 回答