簡體   English   中英

Java 最終阻塞並在方法級別拋出異常

[英]Java finally block and throws exception at method level

readFileMethod1中, IOException在將其拋出到方法級別之前被顯式捕獲,以確保執行finally塊。 但是,是否有必要捕獲異常? 如果我刪除了readFileMethod2中顯示的 catch 塊, finally塊是否也會被執行?

private void readFileMethod1() throws IOException {
    try {
        // do some IO stuff
    } catch (IOException ex) {
        throw ex;
    } finally {
        // release resources
    }
}

private void readFileMethod2() throws IOException {
    try {
        // do some IO stuff
    } finally {
        // release resources
    }
}

finally仍然會被執行,不管你是否捕獲了 IOException。 如果你的 catch 塊所做的只是重新拋出,那么這里就沒有必要了。

不,如果您除了拋出異常之外什么都不做,那么捕獲異常是完全沒有必要的。

是的,finally 塊仍然會被執行。

不,沒有必要捕獲異常,除非您不能在您的方法中重新拋出它。 在您發布的代碼中, readFileMethod2 是要遵循的正確選項。

finally 總是在 try catch 上下文中執行...有關更多信息,請檢查http://download.oracle.com/javase/tutorial/essential/exceptions/finally.ZFC35FDC70D5FC69D269883A822C7A53

無論是否拋出異常,最終都會執行。 只有在執行 try 塊或 catch 塊時 JVM 被關閉,才不會執行 finally 子句。 同樣,如果執行 try 或 catch 代碼的線程被中斷或殺死,即使應用程序作為一個整體繼續運行,finally 塊也可能不會執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM