这是我的代码
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
究竟是什么?
即使我没有使用它,我也得到了与
输出:主要
中捕获异常
哪里会有效?这段代码是否有必要?
答案 0 :(得分:2)
在这种情况下你不需要throws Exception
,因为ArithmeticException
是RuntimeException
,编译器不知道它会被抛出,所以它不会强迫你处理它。参见:
你应该这样做的情况,如果你的异常不是运行时异常,并且你没有围绕可能抛出异常的行< 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