同时捕获java异常FileNotFound和IOException

drx*_*drx 10 java filenotfoundexception ioexception

FileNotFoundException是否以某种方式成为IOException的"子异常"?

这是我的代码打开给定路径上的文件的输入流:

   method(){
        FileInputStream fs;
        try {
            fs = new FileInputStream(path);
            //
            fs.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

为什么我可以忽略FileNotFound而只是捕获IOException呢?FNFException是否是IOException的一部分?

如果我在我的方法中抛出IOException,而不是捕获异常?

    method() throws IOException{

        FileInputStream fs;
        fs = new FileInputStream(path);
        //
        fs.close();

    }
Run Code Online (Sandbox Code Playgroud)

我可以继续在这样的调用方法中捕获FileNotFoundException吗?

    try {

         method();

    }catch (FileNotFoundException e1) {}
Run Code Online (Sandbox Code Playgroud)

感谢您提供的任何帮助!

das*_*ght 13

FileNotFoundException是否以某种方式成为IOException的"子异常"?

是的,延伸:FileNotFoundException IOException

java.lang.Object
    java.lang.Throwable
        java.lang.Exception
            java.io.IOException
                java.io.FileNotFoundException
Run Code Online (Sandbox Code Playgroud)

为什么我可以忽略FileNotFound而只是捕获IOException呢?

捕获异常抛出的基类会捕获异常,除非有更具体的catch子句可用.

我可以继续在这样的调用方法中捕获FileNotFoundException吗?

绝对!实际上,这是一件好事:您的代码应该只处理它知道如何处理的异常,并让所有其他异常传播到可以更好地处理它的地方.


Tim*_*m B 5

是的。

如果你看继承FileNotFoundExceptionIOException. 通过捕获超类,您还可以捕获任何扩展它的东西。

如果您需要以不同的方式处理它,您可以像在第一个示例中一样首先捕获更具体的一个。