<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java 受檢與非受檢的異常 > 原文: [https://howtodoinjava.com/java/exception-handling/checked-vs-unchecked-exceptions-in-java/](https://howtodoinjava.com/java/exception-handling/checked-vs-unchecked-exceptions-in-java/) 在此 Java 異常教程中,了解 Java 中的異常是什么,什么是受檢的異常以及它與非受檢的異常有何不同。 我們還將學習有關 Java 受檢異常的一些最佳實踐。 ```java Table of Contents 1\. What is an exception in Java? 2\. Checked vs unchecked exceptions in Java 3\. Java exception handling best practices ``` ## 1\. Java 中有什么異常? > “異常是在程序執行期間發生的意外事件,它破壞了正常的指令流。” 在 Java 中,所有錯誤和異常都用`Throwable`類表示。 當方法中發生錯誤時,該方法將創建一個對象(`Throwable`的任何子類型)并將其交給運行時系統。 該對象稱為異常對象。 異常對象包含有關錯誤的信息,包括錯誤的類型和發生錯誤時程序的狀態。 創建異常對象并將其交給運行時系統稱為**引發異常**。 #### 1.1 異常處理 在應用程序中創建異常對象時,我們有兩種選擇。 * 我們要么在方法中處理它 * 或者我們可以將其傳遞給調用方方法以使其處理。 在設置方法責任時,這是非常重要的決定。 一種方法應該清楚地表明它將處理所有異常情況,而不會處理哪些異常情況。 它是使用`throws`子句在方法語法中定義的。 要處理異常,我們必須在`try-catch`塊的`catch`部分中捕獲異常。 > 如果在應用程序中未處理異常,則該異常將傳播到 JVM,并且 JVM 通常將終止程序本身。 ## 2\. Java 中的受檢與非受檢異常 #### 2.1 異常層次 在 Java 中,異常大致分為兩部分:**受檢異常和非受檢的異常**。 ![ExceptionHierarchyJava](https://img.kancloud.cn/bb/08/bb088e79366889ab483f1fb3b6a2fef8_400x325.png) #### 2.2 受檢異常 Java 迫使您在應用程序代碼中以某種方式處理這些錯誤情況。 一旦您開始編譯程序,它們將立即出現在您的臉上。 您絕對可以忽略它們,而讓它們傳遞給 JVM,但這是一個壞習慣。 理想情況下,您必須在應用程序內部的適當級別上處理這些異常,以便可以通知用戶有關失敗的信息并要求他重試/稍后再來。 通常,受檢異常表示程序無法直接控制的錯誤情況。 它們通常發生在與外部資源/網絡資源例如數據庫問題,網絡連接錯誤,文件丟失等 > 受檢異常是`Exception`類的子類。 **受檢異常**的示例是:`ClassNotFoundException`,`IOException`,`SQLException`等。 ##### 受檢異常示例 `FileNotFoundException`是 Java 中的一個受檢異常。 任何時候,我們都想從文件系統中讀取文件,Java 會強制我們處理文件可能不存在的錯誤情況。 ```java public static void main(String[] args) { FileReader file = new FileReader("somefile.txt"); } ``` 在上述情況下,您將獲得消息 – `Unhandled exception type FileNotFoundException`的編譯時錯誤。 為了使程序能夠編譯,您必須在`try-catch`塊中處理此錯誤情況。 下面給出的代碼將完全可以編譯。 ```java public static void main(String[] args) { try { FileReader file = new FileReader("somefile.txt"); } catch (FileNotFoundException e) { //Alternate logic e.printStackTrace(); } } ``` #### 2.3 非受檢的異常 Java 還提供了`UncheckedExceptions`,編譯器不會檢查其出現。 一旦執行了任何錯誤代碼,它們就會生效/出現在您的程序中。 編譯器不強制方法聲明其實現引發的非受檢的異常。 通常,此類方法幾乎總是也不會聲明它們。 非受檢的異常是`RuntimeException`的子類。 **非受檢的異常**的示例是:`ArithmeticException`,`ArrayStoreException`,`ClassCastException`等。 “奇怪的是,`RuntimeException`本身是`Exception`的子類,即所有非受檢異常類都應該隱式是受檢異常,但不是。” ##### 非受檢的異常示例 在下面檢查給定的代碼。 上面的代碼沒有給出任何編譯時錯誤。 但是當您舉這個例子時,它拋出`NullPointerException`。`NullPointerException`是 Java 中非受檢的異常。 ```java public static void main(String[] args) { try { FileReader file = new FileReader("pom.xml"); file = null; file.read(); } catch (IOException e) { //Alternate logic e.printStackTrace(); } } ``` 請記住,受檢的異常和非受檢的異常之間最大的**區別**在于,受檢的異常是由編譯器強制執行的,用于指示不受程序控制的異常情況(例如,I/O 錯誤),而非受檢的異常在運行時發生,用于指示編程錯誤(例如,空指針)。 ## 3\. Java 異常處理最佳實踐 1. **當方法無法執行其名稱所說明的功能時,可以使用受檢異常**。 例如預先準備好配置文件并使用配置文件進行配置的名為`prepareSystem()`的方法可以聲明拋出`FileNotFoundException`,這意味著該方法使用了文件系統中的配置文件。 2. 理想情況下,絕對不應將受檢異常用于編程錯誤,而在此類情況下,絕對不應將**資源錯誤**用于流控制。 3. 僅拋出方法無法以任何方式處理的那些異常。 方法應首先嘗試在遇到它時立即對其進行處理。 僅當無法處理內部方法時才引發異常。 4. 定義方法簽名的一種好方法是在方法名稱附近聲明異常。 如果您的方法名為`openFile`,則應拋出`FileNotFoundException”`?。 如果您的方法名為`findProvider`,則應拋出`NoSuchProviderException`。 同樣,應將這些類型的異常設置為受檢異常,因為它會強制調用者處理方法語義所固有的問題。 5. 規則是,如果可以合理地期望客戶端從異常中恢復,請將其設置為受檢的異常。 如果客戶端無法采取任何措施來從異常中恢復,請將其設置為非受檢的異常。 實際上,大多數應用程序必須從幾乎所有異常中恢復,包括`NullPointerException`,`IllegalArgumentExceptions`和許多其他非受檢的異常。 失敗的操作/事務將被中止,但應用程序必須保持活動狀態并準備為下一個操作/事務提供服務。 通常只有在啟動期間關閉應用程序才是合法的。 例如,如果缺少配置文件,并且沒有該配置文件,應用程序將無法執行任何明智的操作,則關閉該應用程序是合法的。 ## 4\. 總結 在本文中,我們了解了 Java 中受檢異常與非受檢異常之間的區別,以及**如何處理非受檢異常**(帶有示例的 Java 中的異常層次結構)。 隨時在評論中提問。 學習愉快! 閱讀更多: * [異步和同步異常](//howtodoinjava.com/java/exception-handling/asynchronous-and-synchronous-exceptions-in-java/ "Asynchronous and synchronous exceptions in java") * [使用內部類的異常處理](//howtodoinjava.com/best-practices/best-practices-for-for-exception-handling/ "Best practices for Exception handling") * [異常處理最佳做法](//howtodoinjava.com/best-practices/java-exception-handling-best-practices/ "Java exception handling best practices") * [有效處理`NullPointerException`](//howtodoinjava.com/java/exception-handling/how-to-effectively-handle-nullpointerexception-in-java/ "How to effectively handle NullPointerException in java") * [**Java 中的自定義異常**](//howtodoinjava.com/best-practices/best-practices-for-for-exception-handling/ "Best practices for Exception handling") * [Java 異常文檔](https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html)
                  <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>

                              哎呀哎呀视频在线观看