0

次のようにカスタム例外クラスを作成しました

public class CustomException extends Exception{
// some code here
}

今、私は次のようなコードを持っています

File file = new File("some_file_path");
try {
    FileOutputStream outputStream = new FileOutputStream(file);
} catch (CustomException e) {
    e.printStackTrace();        
}

しかし、コンパイラはUnhandled exception type FileNotFoundExceptionエラーを表示します

私の要点は、コンパイラは、私が CustomException を介して FileNotFoundException をキャッチしていることを理解していないということですか?

助けてください。

4

5 に答える 5

7

FileNotFoundExceptionIOExceptionException のサブクラスのサブクラスです。

階層型 -

java.lang.Throwable
    java.lang.Exception
        java.io.IOException
            java.io.FileNotFoundException  

そして、階層が -であるCustomExceptionサブクラスです。Exception

java.lang.Throwable
    java.lang.Exception
        java.io.CustomException

CustomException例外のチェーンにないことは明らかであり、IOExceptionどちら のスーパークラスでもないため、でFileNotFoundExceptionキャッチできません。FileNotFoundExceptionCustomException

FileNotFoundExceptionただし、IOExceptionExceptionおよびThrowableexceptでキャッチできますFileNotFoundException

于 2013-02-06T07:04:05.893 に答える
2

コンパイラが理解するのはFileNotFoundException、 とCustomExceptionの 2 つの異なる例外です。次のような両方の例外をキャッチする必要があります。

File file = new File("some_file_path");
try {
    FileOutputStream outputStream = new FileOutputStream(file);
    // do some operation
    // if some cond is not satisfied
    // throw new CustomException("Error Message");
} catch (CustomException | FileNotFoundException e) { // syntax valid if you are using java 7, otherwise write one more catch block
    e.printStackTrace();        
}
于 2013-02-06T06:49:34.207 に答える
1

CustomExceptionとはタイプが違うだけなFileNotFoundExceptionので、ダメです。

基本的に、次のように入力できます。

} catch (T e) {
}

ここTで、 type の値から割り当て可能な型FileNotFoundException、つまり、同じか、より一般的な (スーパー クラス) 型でなければなりません。

于 2013-02-06T06:48:56.813 に答える
0

これは、withasパラメーターの署名FileOutputStreamですFile

public FileOutputStream(File file) throws FileNotFoundException

FileNotFoundExceptionチェックされた例外です。つまり、明示的に処理(キャッチ/スロー)する必要があります。キャッチ/スローする必要CustomExceptionがあるもの(この場合)ではなく、キャッチしています。その上、はサブクラスですが、はサブクラスです。階層レベルとの間には関係がありません。FileNotFoundExceptionFileOutputStreamIOExceptionCustomExceptionExceptionCustomExceptionIOException

于 2013-02-06T07:00:04.380 に答える
0

CustomException クラスが FileNotFoundException をキャッチすることを期待するのはなぜですか? FileNotFoundException Class is extended by IOEXception class (IOException is extended by Exception Class)、あなたの CustomException クラスは、 FileNotFoundException および Exception クラスのスーパークラスである Exception クラスのみを拡張しています。

于 2013-02-06T07:11:23.493 に答える