內部方法A有方法B.方法B拋出異常,但方法A編譯即使沒有捕獲異常或拋出異常,是否有可能?Java方法包含另一種拋出異常的方法
方法B是一樣的東西如下:
MethodB() throws SomeException{
if(Some)
doneSomething
return
else if(some)
donesomethingElse
return
throw SomeException
}
內部方法A有方法B.方法B拋出異常,但方法A編譯即使沒有捕獲異常或拋出異常,是否有可能?Java方法包含另一種拋出異常的方法
方法B是一樣的東西如下:
MethodB() throws SomeException{
if(Some)
doneSomething
return
else if(some)
donesomethingElse
return
throw SomeException
}
如果SomeException
延伸RuntimeException
。那麼即使簽名看起來像這樣,你也不需要去捕捉它。
另請注意,在這種情況下,您可以刪除throws SomeException
。閱讀更多here。
是的,有一些未經檢查的異常,可能不會被抓住/重新拋出。
看看本教程 - Unchecked Exceptions。
即使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
子句導致的問題。
是的,'SomeException'是'RuntimeException'的一個子類。 – 2012-02-14 10:23:04