我的猜测是你试图抛出一个没有被方法声明为它可以抛出的异常类型的异常子类。
以下示例有效
package test.example;
public class ExceptionTest {
public static void main(String[] args) throws Exception{
try {
int value = 1/0;
} catch (Exception e) {
System.out.println("woops the world is going to end");
throw e;
}
}
}
但是,此示例将给出错误。
package test.example;
public class ExceptionTest {
public static void main(String[] args) throws RuntimeException{
try {
int value = 1/0;
} catch (Exception e) {
System.out.println("woops the world is going to end");
throw e;
}
}
}
请注意,在第二个示例中,我只是捕获了 Exception 而不是 RuntimeException,它不会编译,因为我抛出了未声明的抛出异常,即使我确实声明了 RuntimeException。
是的,异常是 RuntimeException 但编译器不知道。
刚刚想到了第三个工作示例来向您展示。这也有效,因为您抛出的类型与您声明的类型相同。(注意唯一的变化是 catch 块)
package test.example;
public class ExceptionTest {
public static void main(String[] args) throws RuntimeException{
try {
int value = 1/0;
} catch (RuntimeException e) {
System.out.println("woops the world is going to end");
throw e;
}
}
}
您需要了解所有这三个答案之间的区别