为什么需要在“最终”内关闭文件并仍将其嵌入在“尝试/捕获”块内?

感激

以下代码段...

    try
    {
        myFile = new FileInputStream( "something.dat" );
        ...
    }
    catch ( IOExcpetion ioe ) 
    { 
        ... 
    }
    finally
    {
        try
        {
            myFile.close();
        }
        catch ( Exception e ) 
        {
            ... 
        }
    }

...据我了解,最终是在关闭文件。但是,为什么必须在其中包含另一个try / catch块呢?对我来说似乎很尴尬。有没有解决的办法?

安库·辛哈尔(Ankur Singhal)

close()调用方法FIleInputStream必须由try catch子句包围API方法本身抛出IOException异常此外IOException异常是经过检查的异常,所以我们需要处理这个问题。

检查异常

被检查的异常在编译时被检查。这意味着如果一个方法抛出一个检查过的异常,那么它应该使用try-catch块处理该异常,或者应该使用throws关键字声明该异常,否则程序将给出编译错误。因为这些异常是在编译时检查的,所以将其命名为“已检查的异常”。

通过API,

/**
     * Closes this file input stream and releases any system resources
     * associated with the stream.
     *
     * <p> If this stream has an associated channel then the channel is closed
     * as well.
     *
     * @exception  IOException  if an I/O error occurs.
     *
     * @revised 1.4
     * @spec JSR-51
     */
    public void close() throws IOException {
}

由于close(),方法正在抛出IOException,因此您需要re-throw the same在语句周围加上或try/catch

推荐这个

还谈到Java7,您可以方便地处理相同的内容

1.)捕获多个异常

2.)try-with-resources语句

要了解IOException的原因,请在此处参考类似的问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么JDBC连接需要在finally块中关闭?

来自分类Java

为什么在Java中尝试/捕获或同步需要语句块?

来自分类Java

为什么一个变量需要在最终块静态

来自分类Dev

为什么需要在@Override [inner class]方法内将变量转换为最终数组?

来自分类Java

为什么在“捕获”或“最终”范围内的“尝试”中未声明变量?

来自分类Python

为什么要在Python中关闭文件?

来自分类Dev

为什么此代码中需要“最终”块

来自分类Java

关闭流/套接字并最终尝试捕获

来自分类Dev

为什么我需要在Promise .then()中关闭?

来自分类Dev

如果medibuntu.org自2010年以来已被关闭,为什么仍将其作为软件包来源提供?

来自分类Dev

为什么需要在以下代码中使Context最终定型?

来自分类Java

为什么需要在Java源文件中转义unicode?

来自分类Java

为什么lambda在引用最终的String字段时需要捕获封闭的实例?

来自分类Java

Java在获取/关闭资源时尝试/捕获/最终的最佳实践

来自分类Dev

为什么我需要在开始块中初始化变量

来自分类Dev

为什么我需要在using块中使用odbcconnection.open

来自分类Dev

为什么有时不需要在Lambda中捕获const变量?

来自分类Java

Spring Boot->为什么我不需要在服务中捕获异常?

来自分类Dev

为什么从rmarkdown渲染pdf需要在渲染之间关闭rstudio?

来自分类Dev

为什么关闭分片时需要在Amazon Kinesis流上使用检查点?

来自分类Dev

为什么我需要时间来关闭流中的文件

来自分类Dev

为什么我的尝试捕获块停止了工作?(飞镖,颤振)

来自分类Java

尝试最终捕获并返回

来自分类Dev

为什么当我尝试连接反向ssh时将其关闭?

来自分类Dev

简单尝试/最终与尝试/捕获

来自分类Dev

为什么需要在结构中填充?

来自分类Dev

我需要在网页中嵌入Excel文件

来自分类Dev

处理clojure异常的更好方法,以及为什么我的异常未在go块内捕获

来自分类Dev

为什么标头块需要在没有相同或其他流的交错帧的连续帧中传输?

Related 相关文章

  1. 1

    为什么JDBC连接需要在finally块中关闭?

  2. 2

    为什么在Java中尝试/捕获或同步需要语句块?

  3. 3

    为什么一个变量需要在最终块静态

  4. 4

    为什么需要在@Override [inner class]方法内将变量转换为最终数组?

  5. 5

    为什么在“捕获”或“最终”范围内的“尝试”中未声明变量?

  6. 6

    为什么要在Python中关闭文件?

  7. 7

    为什么此代码中需要“最终”块

  8. 8

    关闭流/套接字并最终尝试捕获

  9. 9

    为什么我需要在Promise .then()中关闭?

  10. 10

    如果medibuntu.org自2010年以来已被关闭,为什么仍将其作为软件包来源提供?

  11. 11

    为什么需要在以下代码中使Context最终定型?

  12. 12

    为什么需要在Java源文件中转义unicode?

  13. 13

    为什么lambda在引用最终的String字段时需要捕获封闭的实例?

  14. 14

    Java在获取/关闭资源时尝试/捕获/最终的最佳实践

  15. 15

    为什么我需要在开始块中初始化变量

  16. 16

    为什么我需要在using块中使用odbcconnection.open

  17. 17

    为什么有时不需要在Lambda中捕获const变量?

  18. 18

    Spring Boot->为什么我不需要在服务中捕获异常?

  19. 19

    为什么从rmarkdown渲染pdf需要在渲染之间关闭rstudio?

  20. 20

    为什么关闭分片时需要在Amazon Kinesis流上使用检查点?

  21. 21

    为什么我需要时间来关闭流中的文件

  22. 22

    为什么我的尝试捕获块停止了工作?(飞镖,颤振)

  23. 23

    尝试最终捕获并返回

  24. 24

    为什么当我尝试连接反向ssh时将其关闭?

  25. 25

    简单尝试/最终与尝试/捕获

  26. 26

    为什么需要在结构中填充?

  27. 27

    我需要在网页中嵌入Excel文件

  28. 28

    处理clojure异常的更好方法,以及为什么我的异常未在go块内捕获

  29. 29

    为什么标头块需要在没有相同或其他流的交错帧的连续帧中传输?

热门标签

归档