2012-02-14 85 views
1

內部方法A有方法B.方法B拋出異常,但方法A編譯即使沒有捕獲異常或拋出異常,是否有可能?Java方法包含另一種拋出異常的方法

方法B是一樣的東西如下:

MethodB() throws SomeException{ 
    if(Some) 
     doneSomething 
     return 
    else if(some) 
     donesomethingElse 
     return 
    throw SomeException 
} 
+0

是的,'SomeException'是'RuntimeException'的一個子類。 – 2012-02-14 10:23:04

回答

2

如果SomeException延伸RuntimeException。那麼即使簽名看起來像這樣,你也不需要去捕捉它。

另請注意,在這種情況下,您可以刪除throws SomeException。閱讀更多here

1

是的,有一些未經檢查的異常,可能不會被抓住/重新拋出。

看看本教程 - Unchecked Exceptions

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子句導致的問題。