Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同时捕获java异常FileNotFound和IOException_Java_Ioexception_Filenotfoundexception - Fatal编程技术网

同时捕获java异常FileNotFound和IOException

同时捕获java异常FileNotFound和IOException,java,ioexception,filenotfoundexception,Java,Ioexception,Filenotfoundexception,FileNotFoundException是IOException的“子异常”吗 这是我在给定路径打开文件输入流的代码: method(){ FileInputStream fs; try { fs = new FileInputStream(path); // fs.close(); } catch (FileNotFoundException e) {

FileNotFoundException是IOException的“子异常”吗

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

   method(){
        FileInputStream fs;
        try {
            fs = new FileInputStream(path);
            //
            fs.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
为什么我可以忽略FileNotFound而只捕获IOException呢? FNFException是IOException的一部分吗

如果我在方法中抛出IOException,而不是捕获异常,该怎么办

    method() throws IOException{

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

    }
我是否可以继续在调用方法处捕获FileNotFoundException,如下所示

    try {

         method();

    }catch (FileNotFoundException e1) {}
感谢您可能提供的任何帮助

是的

如果查看继承
FileNotFoundException
IOException
的一个子类。通过捕获超级类,您还可以捕获扩展它的任何内容

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

是的,如所示,
FileNotFoundException
IOException
的子类

如果您确实想要
FileNotFoundException
,则必须仅捕获此执行选项,否则捕获
IOException
也将捕获对其进行子类化的任何异常,如
FileNotFoundException
任何其他异常

FileNotFoundException是IOException的“子异常”吗

是,扩展
IOException

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

捕获正在抛出的异常的基类将捕获该异常,除非有更具体的
catch
子句可用

我是否可以继续在调用方法处捕获FileNotFoundException,如下所示

    try {

         method();

    }catch (FileNotFoundException e1) {}

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

从Java 7开始,您可以做:

catch(ExceptionType1 | ExceptionType2 e)
执行多个异常捕获。但是,在您的情况下,您可以按照您的建议捕获IOException

FileNotFoundException是IOException的“子异常”吗

如果我在方法中抛出IOException,而不是捕获异常,该怎么办

你可以这样做。当一个方法抛出一个expetion时,它可以抛出这个异常或者任何继承它的异常

我是否可以继续在调用方法处捕获FileNotFoundException,如下所示

    try {

         method();

    }catch (FileNotFoundException e1) {}
对。如果一个方法声明抛出
a
,如果
B
继承
a
(即使
B
不是由
a
明确抛出),则可以捕获
B

旁注:

  • 您没有正确关闭资源
  • 如果您使用Java7,请改用新文件API
第一点非常重要。在
块中尝试
.close()
;如果您可以成功打开文件,但无法从中读取或执行其他操作,则不会调用
.close()
。你应该做:

FileInputStream in = ...;
try {
    // operate on "in"
} finally {
    in.close();
}
对于Java 7:

try (
    FileInputStream in = ...;
) {
    // operate on "in"
}
// "in" is closed for you here

这是真的,但在这种情况下,这只是一种转移注意力的手段。当一个异常类型扩展另一个异常类型时,您不需要捕获完全不同的异常类型。在我的注释之后修改答案:-)