我对此代码有疑问,它与异常有关:
public class MTest {
public static void main(String args[]) {
try {
m1();
m2();
} catch (Exception e1) {
System.out.println("e");
}
}
static void m1() throws Exception {
try {
throw new Exception();
} catch (Exception e2) {
System.out.println("m1catch");
}
}
static void m2() throws Exception {
try {
throw new Exception();
} finally {
System.out.println("Finally");
}
}
}
所以根据上面的代码,教科书告诉我,m2()
方法不处理自己的异常,它被传递给main。这是什么意思?我如何从上面的代码中看出? m1()
是否处理自己的异常?
最佳答案
任何可以在方法内部引发的已检查异常都必须在 try/catch block 中处理,或者必须声明该方法以引发该异常。当您尝试编译违反这些规则的代码时,Java 编译器会发出警告。
m1()
捕获唯一已检查的异常,因此它处理自己的异常。如果您从 m1()
的声明中删除 throws Exception
,它将正确编译,这意味着它确实处理了所有已检查的异常。
m2()
不处理其异常。如果从 m2()
的声明中删除 throws Exception
,您将收到编译错误,因为抛出了异常但未捕获或检查。
关于java - 处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040869/