为什么可以';在方法中抛出异常(Java)

为什么可以';在方法中抛出异常(Java),java,exception,try-catch,block,throw,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.

我是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
}

对于未检查的异常,您需要在方法签名中添加一个
抛出
,仅

public static void divide(double x, double y) throws Exception {
 ...
}
因为,在第二个示例中不需要
抛出

更多信息:

An是一个
运行时异常
,因此它不需要在
throws
子句中声明,也不需要被
catch
块捕获。但是
Exception
不是
RuntimeException

包括:

未检查的异常类(§11.1.1)免于编译时检查

“未检查的异常类”包括
Error
s和
RuntimeException
s


此外,您还需要检查
y
是否为
0
,而不是
x/y
是否为
0

在Java中引发异常的方法必须在方法签名中删除它

publicstaticvoiddivide(双x,双y)抛出异常

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

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


算术异常
扩展了一个
运行时异常

责怪一个叫Goodeough的家伙,ca 1974。我想在设置对象进行序列化时生成一个NotSerializableException-通过检查
如果(someObj instanceof Serializable)
这是不可能的吗?