guyeuro
V2EX  ›  问与答

Java 有 try finally,没有 catch 的语句是什么意思?

  •  
  •   guyeuro · Aug 15, 2017 · 4269 views
    This topic created in 3374 days ago, the information mentioned may be changed or developed.

    看到如下代码块

    static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {  
        BufferedReader br = new BufferedReader(new FileReader(path));  
        try {  
            return br.readLine();  
        } finally {  
            if (br != null) br.close();  
        }  
    }  
    

    这里为何要有 try finally ?

    9 replies  •  2017-08-15 17:02:29 +08:00
    hamasaki1999
    hamasaki1999
    Aug 15, 2017
    1
    他不是已经抛出 IOException 了吗
    georgetso
    georgetso
    Aug 15, 2017
    2
    不需要处理异常,但要做清洁工作的情况。
    microhz
    microhz
    Aug 15, 2017
    3
    finally 一般做一些必要的资源释放,例如流的关闭和锁的释放。只要不是编译异常,不一定非要 catch
    Arthur5
    Arthur5
    Aug 15, 2017 via Android
    4
    异常要不直接捕获处理,要不接着往上抛出去。这个方法是直接抛出去了(第一行 throws IOException )所以没有 catch
    loryyang
    loryyang
    Aug 15, 2017
    5
    遇到异常不一定需要 catch,也可以往外 throw,让外面去 catch
    这里用 try 是为了 finally 释放资源,而不是要 catch
    Magic347
    Magic347
    Aug 15, 2017
    6
    补一个深度剖析 finally 语句块的链
    https://www.ibm.com/developerworks/cn/java/j-lo-finally/
    JackyBao
    JackyBao
    Aug 15, 2017 via Android
    7
    br 不会自动释放吗?
    ke1e
    ke1e
    Aug 15, 2017 via Android
    8
    一般用于释放资源
    yuan93
    yuan93
    Aug 15, 2017
    9
    try 块表示可能出异常的代码块
    catch 块表示异常出现时怎么处理
    finally 块表示不管正常或者异常最终都会执行的代码块
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1917 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 15:31 · PVG 23:31 · LAX 07:31 · JFK 10:31
    ♥ Do have faith in what you're doing.