这里使用了什么“throws”子句以及如果不使用的话?

时间:2014-03-19 06:32:32

标签: java exception try-catch throws

这是我的代码

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究竟是什么? 即使我没有使用它,我也得到了与

相同的输出
  

输出:主要

中捕获异常

哪里会有效?这段代码是否有必要?

4 个答案:

答案 0 :(得分:2)

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

enter image description here

你应该这样做的情况,如果你的异常不是运行时异常,并且你没有围绕可能抛出异常的行< em> try-catch 子句,那么你必须将方法声明为throws ThatException

答案 1 :(得分:0)

  

这里游荡的是,在这段代码的第1行&#34;抛出异常&#34;   究竟是做什么的?

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

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

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

答案 2 :(得分:0)

  

“throws”用于方法的签名以通知“父级”   调用此函数的方法/方法“此函数”可能“   抛出异常,“父”方法/调用者应该处理它。是的,正如@maroun Maroun所说的那样,“在目前的案例中,抛出是不可能的”

答案 3 :(得分:0)

in line 1 of this code "throws Exception" what exactly does?

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

在你的情况下,tryit()抛出异常而不处理异常条件。在main中你调用了tryIt(),因此main负责处理tryIt()的unhandle异常抛出异常。

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

当您希望使用正确的try catch(Checked type of exception)调用方法时,它是有效的。

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

有关已检查和未检查的异常的详细信息,请参阅Checked and Unchecked Exception