2012-02-14 7 views
1

メソッドAの中にメソッドBがありますが、メソッドBは例外をスローしますが、メソッドAは例外を捕捉しない場合でも例外をスローしてもコンパイルできます。Javaメソッドに別のメソッドが含まれています

方法Bとして以下のようなものです:SomeExceptionRuntimeExceptionを拡張する場合は

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

はい、 'SomeException'は' RuntimeException'のサブクラスです。 –

答えて

2

。署名がそのように見えても、それをキャッチする必要はありません。

この場合、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句を追加することによって引き起こされた問題を理解していない管理者によって変更された後。