Java “为什么?”;抛出;这里使用子句,如果不使用该子句怎么办?

Java “为什么?”;抛出;这里使用子句,如果不使用该子句怎么办?,java,exception,try-catch,throws,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"); } } 这里我所

这是我的密码

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行中,
抛出异常
到底做了什么?
即使我没有使用它,我也得到了与之相同的输出

输出:在main中捕获异常


在哪里有效?在这段代码中有必要吗?

在这种情况下,您不需要
抛出异常
,因为是一个,编译器不知道它将被抛出,所以它不会强迫您处理它。见:

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

这里我要说的是,在代码的第1行“抛出异常” 你到底想干什么

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

而且,在您的例子中,它是一个
运行时异常
,将从该方法中抛出,因此,无需使用异常声明该方法。这就是为什么即使您删除了抛出异常的部分,它仍然可以工作

如果该方法将抛出一个选中的异常,而您没有在方法本身内部处理它,那么您必须声明在方法签名中抛出该异常

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

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

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

Where it will be effective? Is it necessary in this code?
当您希望使用正确的try-catch(选中的异常类型)调用方法时,它是有效的

在这段代码中它是不必要的,因为在您的代码中,您将获得java.lang.arithmetricexception:/by zero exception,这是RuntimeException(未检查类型),编译器不会抱怨没有处理它


有关选中和未选中异常的更多信息,请参见

谢谢大家。。我得到了各种各样的答案。。特别感谢@Maroun
Where it will be effective? Is it necessary in this code?