未报告的例外例外;必须被抓或宣布被扔?

时间:2015-05-21 18:16:56

标签: java

以下程序将收到错误

  

未报告的例外例外;必须被抓住或宣布被抛出

为什么重新投掷不起作用?在C#中,无需在try块中包装调用。

public class HelloWorld{

    public static double test() throws Exception {
        return 1;
    }

    public static void main(String []args){
        try {
            double a = test();
            System.out.println(a);
        }
        catch (Exception e) {
            throw e;
        }
    }
}

3 个答案:

答案 0 :(得分:4)

C#没有检查异常,所以这个编译错误不会发生在那里。

在Java中,如果要从方法中抛出已检查的异常,则必须将该异常添加到throws子句,在此处将主方法更改为:

public static void main(String[] args) throws Exception

当从main方法抛出异常时,JVM会将堆栈跟踪写入stderr。

通常也可以在未经检查的异常(RuntimeException)中包装异常。在这种特殊情况下,由于这是从main方法抛出的,并且已检查的Exception的传播不是问题,所以包装异常的所有操作都会产生更大的堆栈跟踪。

答案 1 :(得分:1)

您需要尝试throw new RuntimeException(e)而不是throw e。抛出异常会产生编译时错误,因为它需要您处理已检查的异常。 new RuntimeException(e)将基本包装已检查的异常并抛出它,中止程序。

答案 2 :(得分:0)

如果main()抛出异常并且未捕获异常,则main()必须具有throws声明。