以下程序将收到错误
未报告的例外例外;必须被抓住或宣布被抛出
为什么重新投掷不起作用?在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;
}
}
}
答案 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
声明。