」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Java 中的異常處理

Java 中的異常處理

發佈於2024-08-01
瀏覽:281

Exception Handling In Java

當你執行Java程式碼或程式時,它要麼編譯並執行,要麼拋出錯誤。當程式碼拋出異常時,它是錯誤或異常的結果。

錯誤更為嚴重。它發生在程式碼範圍之外,但在應用程式運行的環境內。該程式預計不會捕獲並處理錯誤。

錯誤的一些例子是

  • 記憶體不足錯誤
  • 虛擬機器錯誤
  • StackOverFlowError

異常發生在代碼範圍內。它也稱為執行錯誤,這意味著它在程式碼執行期間發生。程式設計師應該捕獲並處理程式中的異常。

這篇文章將更專注於異常和運行時錯誤。您將了解有關異常以及如何處理 Java 程式中的異常錯誤的所有資訊。

Java 中的執行錯誤類型

Java中存在三種類型的執行錯誤。這是每個人的細分

。編譯時錯誤

這種類型的錯誤稱為編譯錯誤或檢查錯誤。 Java 程式在編譯階段會拋出此程式碼。

換句話說,這個錯誤是在Javac程式碼編譯為字節碼的時候發生的。編譯時錯誤通常是由程式碼語法錯誤引起的。

例如,當程式設計師未能在語句末尾加上分號或未能在列印之前初始化變數時。

public class JavaExceptionCodes {
    public static void main (String []args){
        int y = 10      //no semicolon
        System.out.println(y);
    }

}

。運行時錯誤

運行時錯誤也稱為異常錯誤或未經檢查的錯誤。它在程式執行時發生。程式碼將編譯,但在運行時會拋出錯誤。

運行時錯誤可進一步分為內建異常和使用者定義異常。內建異常的範例包括:

  • ArrayIndexOutOfBoundsException
  • 算術異常
  • FileNotFoundException
  • 空指標異常

例如,如果使用者輸入 int 而不是字串或插入大於陣列大小的值。

public class JavaExceptionCodes {
    public static void main (String []args) {
        int nombas[] = {1, 2, 3, 4, 5};
        System.out.println(nombas[6]); 

    }
}
//ArrayIndexOutOfBoundsException

。邏輯錯誤

也稱為語意錯誤,如果程式的邏輯輸出有錯誤,就會發生這種錯誤。例如,3 3 顯示輸出 7,或當您登入帳戶並登陸另一個個人資料時。

編譯時錯誤是最容易捕獲的,因為您的 IDE 總是會向程式設計師指出此錯誤。大多數時候邏輯錯誤是最難看到的錯誤,因為程式碼不會拋出編譯時或執行時錯誤。

異常處理的概念

異常處理用於捕獲程式中的錯誤並維持程式執行的正常流程。通常,一旦程式拋出錯誤,程式碼就會停止執行。

預先捕獲並處理錯誤將使程式能夠跳過有錯誤的程式碼區塊並繼續執行程式的其餘部分。

異常處理方法:

Try – Catch – Final – Throw – Throws是Java中異常處理的方法清單。讓我們透過範例詳細分析它們:

。嘗試

Try 用來括起可能引發異常的一行或幾行程式碼。還有一個嵌套的 try,它是帶有內部 try 區塊的 try。他們服務於相同的目的。

句法

try{

}

。抓住

catch 是用來擷取 try 區塊中拋出的錯誤的程式碼區塊。

句法

try{

}
catch (Exception e){

}

多個 catch 區塊

public class JavaExceptionCodes {
    public static void main (String []args) {
        int x = 10;
        int y = 0;
        int z ;
        int nombas [] = {5, 6, 7, 8, 9};
        try {
            System.out.println(z = x / y);
            System.out.println(nombas[6]);
        }
        catch (ArithmeticException e){
            System.out.println("Can't divide by 0. Choose another number"   e);
        }
        catch(ArrayIndexOutOfBoundsException e){
            System.out.println("Array Out Of Bound"   e);
        }
        System.out.println("End");
    }
}

。最後

最後是一個可選的程式碼區塊,通常放置在 try 和 catch 程式碼區塊之後。它用於執行重要的程式碼。無論程式是否拋出錯誤,finally 區塊都會被執行。

句法

try{

}
catch (Exception e){

}
finally{

}

。丟

Throw 是一個關鍵字,用於在方法或程式碼區塊內引發異常。

句法

public class JavaExceptionCodes {
    public static void main (String []args) {

           try { throw new ArithmeticException("Try Run");
           }
           catch (ArithmeticException e){
               System.out.println("Catch Exception Error");
           }

    }
}

。投擲

與 throw 關鍵字不同, throws 關鍵字不用於引發例外。但是,它指定該方法可能存在異常。 Throws 用於方法簽名中,而不是方法內部。

處理異常的最佳實踐

  1. 一個 try 區塊可以有多個語句(程式碼行)。最好建立多個 catch 區塊來捕獲每個語句中的錯誤。

  2. 如果您使用多個 catch 區塊,請務必指定異常類型。

  3. 如果一個try區塊中有多個語句,並且您不知道出錯的語句,則在其他異常的末尾創建一個最終的一般異常來捕獲未知錯誤。

  4. 始終將通用異常 catch 區塊放在其他自訂異常 catch 區塊的末端。

版本聲明 本文轉載於:https://dev.to/akamzchidi/exception-handling-in-java-f32?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內容...
    程式設計 發佈於2024-12-18
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-18
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-18
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-12-18
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-18
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-18
  • CSS3 轉場是否提供事件來偵測起點和終點?
    CSS3 轉場是否提供事件來偵測起點和終點?
    了解 CSS3 過渡事件CSS3 過渡允許在 Web 元素上實現流暢的動畫和視覺效果。為了增強使用者體驗並使操作與這些轉換同步,監控其進度非常重要。本文解決了 CSS3 是否提供事件來檢查過渡何時開始或結束的問題。 W3C CSS 過渡草案W3C CSS 過渡草案規定CSS 轉換會觸發對應的 DOM...
    程式設計 發佈於2024-12-18
  • Java 中可以手動釋放記憶體嗎?
    Java 中可以手動釋放記憶體嗎?
    Java 中的手動內存釋放與垃圾回收與C 不同,Java 採用託管內存框架來處理內存分配和釋放由垃圾收集器(GC) 自動執行。這種自動化方法可以提高記憶體利用率並防止困擾 C 程式的記憶體洩漏。 Java 中可以手動釋放記憶體嗎? 由於 Java 的記憶體管理是由GC,它沒有提供像 C 中的 fre...
    程式設計 發佈於2024-12-18
  • Java 1.6 中如何可靠地確定檔案是否為符號連結?
    Java 1.6 中如何可靠地確定檔案是否為符號連結?
    在 Java 1.6 中驗證符號連結確定符號連結的存在對於各種文件處理操作至關重要。在 Java 中,識別符號連結時需要考慮一些潛在問題,特別是在目錄遍歷的上下文中。 檢查符號連結的常見方法是比較文件的絕對路徑和規範路徑。規範路徑表示檔案的標準化路徑,而絕對路徑可能包括符號連結。傳統上,概念是如果這...
    程式設計 發佈於2024-12-17
  • 如何使背景顏色透明,同時保持文字不透明?
    如何使背景顏色透明,同時保持文字不透明?
    背景顏色的不透明度而不影響文本在Web 開發領域,實現透明度通常對於增強視覺吸引力和網站元素的功能。常見的要求是對 div 背景套用透明度,同時保留所包含文字的不透明度。這可能會帶來挑戰,特別是在確保跨瀏覽器相容性方面。 rgba 解決方案最有效且廣泛支持的解決方案是利用「RGBA」(紅、綠、藍、A...
    程式設計 發佈於2024-12-17
  • PHP 字串比較:`==`、`===` 或 `strcmp()` – 您應該使用哪個運算子?
    PHP 字串比較:`==`、`===` 或 `strcmp()` – 您應該使用哪個運算子?
    PHP 中的字串比較:'=='、'===' 或 'strcmp()'? PHP 中的字串比較PHP 可以使用不同的運算子來完成,例如「==」、「===」或「strcmp()」函數。此比較涉及檢查兩個字串是否相等。 '==' 與'...
    程式設計 發佈於2024-12-17
  • 如何自訂操作列的按鈕和外觀?
    如何自訂操作列的按鈕和外觀?
    自訂操作欄的按鈕和外觀要實現所需的自訂操作欄外觀,請考慮以下步驟: 1.建立自訂操作按鈕若要將圖片包含為按鈕,請透過擴充Button類別來定義自訂視圖。然後可以將此自訂視圖顯示在 ActionBar 上,如下所示:<Button android:id="@ id/my_cus...
    程式設計 發佈於2024-12-17
  • 介紹 Laravel 的履歷解析器/CV 解析器
    介紹 Laravel 的履歷解析器/CV 解析器
    照片由 Mohammad Rahmani 在 Unsplash 上拍攝 基於我們的 Resume/CV Parsing AI API 端點的流行,我們專門為您製作了一個專門的輕量級 Laravel 庫。 招募的未來:敏銳、精確且對 Laravel 友好 這個新套件可在 github...
    程式設計 發佈於2024-12-17
  • 如何在 PHP 中重新格式化日期以方便使用者顯示?
    如何在 PHP 中重新格式化日期以方便使用者顯示?
    在PHP 中重新格式化日期使用資料庫中儲存的日期時,通常需要重新格式化它們以便於使用者友好的顯示。對於以「2009-08-12」等格式儲存的日期尤其如此,人類本質上無法讀取這種格式。 為了解決這個問題,PHP 提供了各種工具,使您能夠輕鬆重新格式化日期。一種有效的方法是使用 DateTime 類,它...
    程式設計 發佈於2024-12-17
  • 為什麼我無法將元素新增到具有通配符泛型類型(`?extends Parent`)的 Java 集合中?
    為什麼我無法將元素新增到具有通配符泛型類型(`?extends Parent`)的 Java 集合中?
    型安與通配符泛型:了解禁止修飾符在Java 使用泛型集合時,通配符泛型的概念可以引入某些最初看起來可能違反直覺的限制。一個典型的例子是無法在具有通配符泛型類型的 Java 集合中新增值。 考慮以下程式碼片段:List<? extends Parent> list = ...; Paren...
    程式設計 發佈於2024-12-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3