在方法A中,有方法B.方法B抛出异常,但方法A编译即使它没有捕获异常或抛出异常,是否可能?
方法B如下所示:
MethodB() throws SomeException{
if(Some)
doneSomething
return
else if(some)
donesomethingElse
return
throw SomeException
}
答案 0 :(得分:2)
如果SomeException
延伸RuntimeException
。然后即使签名看起来像你也不需要抓住它。
另请注意,您可以在这种情况下删除throws SomeException
。阅读更多here。
答案 1 :(得分:1)
是的,有一些未经检查的例外,可能不会被抓住/重新播放。
查看本教程 - Unchecked Exceptions。
答案 2 :(得分:0)
即使SomeException
是一个已检查的异常,也可能由于单独编译而发生这种情况。
假设你写了一个类:
public class B {
public static void foo() {
}
}
然后是一个叫它的类:
public class A {
public static void main(String[] args) {
B.foo();
}
}
然后说:
javac A.java
java A
一切都很好。现在换B:
public class B {
public static void foo() throws java.io.IOException {
throw new java.io.IOException();
}
}
这次只是在运行之前编译B:
javac B.java
java A
你得到:
Exception in thread "main" java.io.IOException
at B.foo(B.java:4)
at A.main(A.java:4)
在现实世界中,当个别.jar文件被维护者修改后更新时会发生这种情况。维护人员不了解添加更多throws
子句所导致的问题。