为什么我不能在方法中抛出异常(Java)

时间:2013-11-23 00:32:07

标签: java exception try-catch block throw

我是Java新手,在抛出异常方面遇到了一些问题。也就是说,为什么这是不正确的

public static void divide(double x, double y){
    if(y == 0){
    throw new Exception("Cannot divide by zero."); 
        //Generates error message that states the exception type is unhanded 
}
else
    System.out.println(x + " divided by " + y + " is " + x/y);
    //other code follows
}

但是这个好吗?

public static void divide(double x, double y){
if(y == 0)
    throw new ArithmeticException("Cannot divide by zero.");
else
    System.out.println(x + " divided by " + y + " is " + x/y);
    //other code follows
}

3 个答案:

答案 0 :(得分:9)

ArithmeticExceptionRuntimeException,因此不需要在throws子句中声明或由catch块捕获。但Exception不是RuntimeException

Section 11.2 of the JLS涵盖了这一点:

  

未经检查的异常类(第11.1.1节)免于编译时检查。

“未经检查的例外类”包括ErrorRuntimeException s。

此外,您还需要检查y0,而不是x / y0

答案 1 :(得分:3)

您需要在方法签名 中为未经检查的例外添加throws。例如:

public static void divide(double x, double y) throws Exception {
 ...
}

ArithmeticException extends RuntimeException以来,第二个示例中不需要throws

更多信息:

答案 2 :(得分:0)

在Java中抛出异常的方法必须在方法签名中对其进行删除

public static void divide(double x, double y) throws Exception

如果没有声明,您的代码将无法编译。

有一个特殊的异常子集可以扩展RuntimeException类。这些异常不需要在方法签名中声明。

ArithmeticException扩展了RuntimeException