1

这是我的代码

static void tryit() throws Exception
{
      System.out.println(10 / 0);
}

public static void main(String[] args) 
{
    try {
        tryit();

    } catch (Exception e) {
        System.out.println("Exception caught in main");
    }
}

在这里徘徊的是,在此代码的第 1 行中throws Exception究竟做了什么?
即使我没有使用它,我也得到了相同的输出

输出:main 中捕获的异常

哪里会有效果?这段代码有必要吗?

4

4 回答 4

2

throws Exception在这种情况下你不需要因为ArithmeticExceptionis a RuntimeException,编译器不知道它会被抛出,所以它不会强迫你处理它。看:

在此处输入图像描述

在你应该这样做的情况下,如果你有一个不是运行时异常的异常,并且你没有用try-catch子句包围可能引发异常的行,那么你必须将方法声明为.throws ThatException

于 2014-03-19T06:34:16.410 回答
0

在这里徘徊的是,在此代码的第 1 行“抛出异常”究竟是做什么的?

它把责任交给了函数的调用者,这个方法可以抛出一个异常,你[调用者]必须处理它。

而且,在您的情况下,它将RuntimeException从该方法中抛出,因此,无需使用异常声明该方法。这就是为什么即使您删除了抛出异常的部分,它仍然有效。

如果该方法将抛出一个已检查的异常,并且如果您不在方法本身内部处理它,则您必须在方法签名中声明抛出该异常。

于 2014-03-19T06:34:29.783 回答
0

“抛出”用于方法的签名中,以通知“调用此函数的父方法/方法”该函数“可能”抛出异常,并且“父”方法/调用者应处理它。是的,正如@maroun Maroun 所说,“在当前情况下,throws 是不必要的”

于 2014-03-19T06:35:09.017 回答
0
in line 1 of this code "throws Exception" what exactly does?

throws 关键字告诉编译器带有 throws 关键字的方法具有异常条件并且它不会处理该异常。使用 throws 关键字调用方法的任何方法都有责任处理该异常。

在您的情况下,tryit() throws Exception 不处理异常情况。在 main 中,您调用了 tryIt(),因此 main 负责处理 tryIt() throws Exception 的未处理异常。

Where it will be effective? Is it necessary in this code?

当您希望使用正确的 try catch(检查类型的异常)调用您的方法时,它是有效的。

在此代码中没有必要,因为在您的代码中,您得到 java.lang.ArithmeticException: / 零异常,即 RuntimeException(Un Checked type) 编译器不会抱怨不处理它。

有关已检查和未检查异常的更多信息,请参阅已检查和未检查异常

于 2014-03-19T07:05:56.893 回答