<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Java `try-finally`塊 > 原文: [https://howtodoinjava.com/java/exception-handling/try-catch-finally/](https://howtodoinjava.com/java/exception-handling/try-catch-finally/) Java `try`,`catch`和`finally`塊有助于編寫可能在運行時引發[異常](https://howtodoinjava.com/java/exception-handling/checked-vs-unchecked-exceptions-in-java/)的應用程序代碼,并為我們提供了通過執行替代應用程序邏輯或[優雅地處理異常](https://howtodoinjava.com/best-practices/java-exception-handling-best-practices/),以向用戶報告。 它有助于防止丑陋的應用程序崩潰。 ## 1\. Java `try`,`catch`和`finally`塊 #### 1.1 `try`塊 `try`塊包含應在正常條件下運行的應用程序代碼。 例如,讀取文件,寫入數據庫或執行復雜的業務操作。 `try`塊寫為`try`關鍵字,后跟花括號。 ```java try { //application code } ``` #### 1.2 `catch`塊 可選的`catch`塊位于`try`塊之后,并且必須處理`try`塊引發的受檢異常以及任何可能的非受檢異常。 ```java try { //code } catch(Exception e) { //handle exception } ``` 應用程序可能會以 N 種不同方式出錯。 這就是為什么我們可以將**多個`catch`塊**與單個`try`塊相關聯的原因。 在每個`catch`塊中,我們可以以一種獨特的方式處理一個或多個特定的異常。 當一個`catch`塊處理異常時,不執行下一個`catch`塊。 控制直接從已執行的`catch`塊轉移到執行器的其余部分,包括`finally`塊。 ```java try { //code } catch(NullPointerException e) { //handle exception } catch(NumberFormatException e) { //handle exception } catch(Exception e) { //handle exception } ``` #### 1.3 `finally`塊 可選的`finally`塊使我們有機會在每次`try-catch`塊完成時運行我們要執行的代碼 - 有錯誤或無錯誤。 即使我們未能在`catch`塊中成功處理異常,也可以保證`finally`塊語句的執行。 ```java try { //open file //read file } catch(Exception e) { //handle exception while reading the file } finally { //close the file } ``` #### 1.4 僅`try`塊是強制性的 請注意,只有`try`塊是必需的,而`catch`和`finally`塊是可選的。 使用`try`塊,我們可以根據需要使用`catch`塊或`finally`塊。 下面可能用 Java 給出兩種組合。 **這兩個版本均有效**。 ```java try { } catch(Exception e) { } ``` ```java try { } finally { } ``` ## 2\. Java 異常處理如何工作? 在正常情況下,當運行時發生異常時,JVM 將錯誤信息包裝在`Throwable`子類型的實例中。 此異常對象類似于其他 Java 對象,并且具有字段和方法。 唯一的區別是 JVM 檢查它們的存在并將控制權傳遞給`catch`塊,該塊可以處理**異常類型或其父類類型**。 ![try catch finally flow](https://img.kancloud.cn/9e/91/9e91bbee8aee8d5f190c763dbc727180_555x507.png) `try catch finally`流 當在應用程序中找不到異常的`catch`塊時,**未捕獲的異常**由 JVM 級別的**默認異常處理程序處理**。 它向用戶報告異常并終止應用程序。 ## 3\. 帶有`try`,`catch`和`finally`塊的不同執行流程 我們來看一些示例,以了解在不同情況下執行流程的流程。 #### 3.1 `try`,`catch`和`finally`塊 – 沒有發生異常 如果沒有發生異常,那么 JVM 將僅執行`finally`塊。 `catch`塊將被跳過。 ```java try { System.out.println("try block"); } catch (Exception e) { System.out.println("catch block"); } finally { System.out.println("finally block"); } ``` 程序輸出。 ```java try block finally block ``` #### 3.2 `try`,`catch`和`finally`塊 – 發生異常 如果`try`塊中發生異常,則 JVM 將首先執行`catch`塊,然后執行`finally`。 ```java try { System.out.println("try block"); throw new NullPointerException("Null occurred"); } catch (Exception e) { System.out.println("catch block"); } finally { System.out.println("finally block"); } ``` 程序輸出: ```java try block catch block finally block ``` #### 3.3 `try`和`finally`塊 – 未處理異常 如果提供的`catch`塊未處理異常,則 JVM 默認異常處理程序將處理該異常。 在這種情況下,將執行`finally`塊,然后執行默認的異常處理機制。 ```java try { System.out.println("try block"); throw new NullPointerException("Null occurred"); } finally { System.out.println("finally block"); } ``` 程序輸出: ```java try block finally block Exception in thread "main" java.lang.NullPointerException: Null occurred at com.howtodoinjava.Main.main(Main.java:12) ``` #### 3.4 `try`,`catch`和`finally`塊 – 多個`catch`塊 如果有多個`catch`塊與`try`塊相關聯,則異常由順序處理的第一個`catch`塊處理,該異常可以處理異常類型或其父類型。 例如,處理`IOException`的`catch`塊可以處理`FileNotFoundException`類型的異常,這也是因為`FileNotFoundException extends IOException`。 ```java try { System.out.println("try block"); throw new NullPointerException("null occurred"); } catch (NumberFormatException e) { System.out.println("catch block 1"); } catch (NullPointerException e) { System.out.println("catch block 2"); } catch (Exception e) { System.out.println("catch block 3"); } finally { System.out.println("finally block"); } ``` 程序輸出: ```java try block catch block 2 finally block ``` #### 3.5 `try`,`catch`和`finally`塊 – `catch`塊引發異常 在`catch`塊中處理另一個異常時,有時可能會出現異常。 它將如何處理? 如果`catch`塊中有異常,則將執行轉移到與各個`catch`塊相關聯的`finally`塊(如果有)。 然后,將該異常傳播到方法調用棧中,以找到可以處理此異常的`catch`塊。 如果找到了此類`catch`塊,則處理異常,否則 JVM 默認異常處理程序將處理異常并終止應用程序。 ```java try { System.out.println("try block"); throw new NullPointerException("NullPointerException occured"); } catch (NullPointerException e) { System.out.println("catch block 1"); throw new NumberFormatException("NumberFormatException occurred"); } catch (Exception e) { System.out.println("catch block 2"); } finally { System.out.println("finally block"); } ``` 程序輸出: ```java try block catch block 1 finally block Exception in thread "main" java.lang.NumberFormatException: NumberFormatException occurred at com.howtodoinjava.Main.main(Main.java:18) ``` ## 4\. `try-with-resources` 對于**可關閉的**資源(例如流),Java SE 7 引入了`try-with-resources`語句,這是在上述情況下處理異常的推薦方法。 在這種方法中,我們不需要關閉流,而 JVM 會為我們完成它。 它消除了`finally`塊的需要。 在`try-with-resources`中,資源在小括號內的`try`塊中打開,`finally`塊完全消失了。 ```java try (BufferedReader br = new BufferedReader(new FileReader("C:/temp/test.txt"))) { String sCurrentLine; while ((sCurrentLine = br.readLine()) != null) { System.out.println(sCurrentLine); } } catch (IOException e) { e.printStackTrace(); } ``` 閱讀更多信息: [Java 7 `try-with-resource`](https://howtodoinjava.com/java7/try-with-resources/) 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看