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

FileNotFoundExceptionIOException异常的子类的子类。

分层 -

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

并且CustomExceptionException层次结构的子类 -

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

很明显CustomException,它不在 Exception 链中,它既不是超类,IOException也不 FileNotFoundException是你不能赶上FileNotFoundException的原因CustomException

FileNotFoundException但是您可以使用IOException和exceptException来捕捉。ThrowableFileNotFoundException

于 2013-02-06T07:04:05.893 回答
2

编译器理解的是FileNotFoundException并且CustomException是两个不同的异常。您需要捕获两个异常,例如:

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) {
}

whereT必须是可从 type 的值分配的类型FileNotFoundException,即相同或更通用(超类)类型。

于 2013-02-06T06:48:56.813 回答
0

为什么您希望您的 CustomException 类捕获 FileNotFoundException?FileNotFoundException Class is extended by IOEXception class (IOException is extended by Exception Class),您的 CustomException 类仅扩展 Exception 类,它是 FileNotFoundException 和 Exception 类的超类。

于 2013-02-06T07:11:23.493 回答
0

这是FileOutputStreamwith Fileas 参数的签名:

public FileOutputStream(File file) throws FileNotFoundException

FileNotFoundException是一个检查异常,这意味着它必须被显式处理(捕获/抛出)。你正在捕捉CustomException而不是你必须捕捉/抛出的东西(在这种情况下FileNotFoundException)。此外,FileOutputStreamis属于IOException子类,而CustomExceptionis属于Exception子类。层级之间CustomExceptionIOException层级之间没有关系。

于 2013-02-06T07:00:04.380 回答