目錄
一、Java異常簡介
1、Exception和Error
2、NoClassDefFoundError 和 ClassNotFoundException 有什麼差別?
二、trycatch語法
#1、try語句
2、catch語句
3、finally語句
4、throws語句
5、throw語句
6、拋出例外
7、擷取例外
三、trycatch的執行順序
四、異常處理原則
首頁 Java java教程 完全掌握java異常處理機制原理與應用

完全掌握java異常處理機制原理與應用

Mar 29, 2022 pm 12:03 PM
java

本篇文章為大家帶來了關於java的相關知識,其中主要介紹了關於異常處理機制的原理和應用相關問題,包括了Exception和Error、trycatch語法、trycatch執行順序等等,希望對大家有幫助。

完全掌握java異常處理機制原理與應用

推薦學習:《java學習教學

一、Java異常簡介

大家對trycatch可能並不陌生,也都使用的非常熟練了。

當程式運行過程中發生錯誤時,就會拋出異常,拋出異常總比終止程式來的好的多。

也可以在已知某個錯誤要發生時,進行trycatch操作,異常時進行某些特有操作。

1、Exception和Error

Exception和Error都繼承於Throwable 類,在Java 中只有Throwable 類型的實例才可以被拋出或捕獲,它是異常處理機制的基本組成類型。

Exception是可預期的異常情況,可以取得到這種異常,並對其進行業務外的處理。

Error是無法預料的異常,error發生後,會直接導致JVM無法處理。

Exception分為檢查性異常、非檢查性異常。

檢查性異常,必須在編寫程式碼時,使用try catch捕獲(例如:IOException異常)。

非檢查性異常,編譯器不會發現這個地方是否會產生一次,例如空指標異常,這種異常是在程式碼編寫或使用過程中透過規範可以避免發生的。例如sts的findbugs功能就可以偵測到程式碼的空指標異常。

2、NoClassDefFoundError 和 ClassNotFoundException 有什麼差別?

NoClassDefFoundError是JVM執行時透過classpath載入類別時,找不到對應的類別而拋出的錯誤。

ClassNotFoundException:如果在編譯過程中可能出現此異常,則在編譯過程中必須將其拋出。

NoClassDefFoundError的發生場景:

  1. 類別依賴的class或jar不存在
  2. 類別檔案存在,但是在不同的域中,簡而言之,就是找不到

ClassNotFoundException的發生場景:

  1. #呼叫class的forName方法時,找不到指定的類別
  2. ClassLoader中的findSystemClass () 方法時,找不到指定的類別
public static void main(String[] args) {
    try {
        Class.forName("test");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }}
登入後複製

二、trycatch語法

#1、try語句

try語句用大括號包含一段程式碼,該段程式碼可能會拋出一個或多個例外。

2、catch語句

catch語句的參數類似方法的聲明,包括一個例外類型和一個例外物件。例外類型必須為Throwable類別的子類,它指明了catch語句所處理的例外類型,例外物件則由執行時間系統在try所指定的程式碼區塊中產生並被捕獲,大括號中包含物件的處理,其中可以呼叫物件的方法。

catch語句可以有多個,分別處理不同類別的例外。 Java運行時系統從上到下分別對每個catch語句處理的例外類型進行偵測,直到找到類型相符的catch語句為止。這裡,類型匹配指catch所處理的例外類型與產生的例外物件的類型完全一致或是它的父類,因此,catch語句的排列順序應該是從特殊到一般。

3、finally語句

#不管try中是否會拋出例外,finally語句中的程式碼都會執行,finally 語句區塊的最重要的作用應該是釋放申請的資源。

4、throws語句

throws總是出現在函數頭後,用來標示該方法可能拋出的例外。

5、throw語句

與throws異曲同工,只是位置不同,throw放在catch模組中,程式會在throw執行後立即終止,throw後的程式碼不執行了,finally除外。

6、拋出例外

public void test() throws Exception{
    throw new Exception();};
登入後複製

7、擷取例外

try{
    //代码区}catch(Exception e){
    log.error("error: {}", e);}finally{
    //最后必须执行的部分}
登入後複製

三、trycatch的執行順序

從try中第一行程式碼開始執行,執行到出現異常的程式碼,JVM會建立一個異常物件。
判斷catch是否能捕獲到jvm創建的異常對象,

如果捕獲到就跳到catch代碼塊中,不會結束程序,繼續從catch中的代碼邏輯;

如果捕獲不到,直接列印異常訊息並結束程序。

如果try中沒有異常,則執行完try中程式碼,跳過catch,進入finally程式碼區塊。

四、異常處理原則

方法內如果拋出需要檢測的異常,那麼方法上必須聲明,否則必須在方法內用try-catch捕捉,否則編譯失敗。
如果呼叫了宣告異常的函數,要嘛try-catch要嘛throws,否則編譯失敗。
什麼時候catch,什麼時候throws?功能內容可以解決,用catch,解決不了,用throws告訴呼叫者,有呼叫者解決。
如果一個功能拋出了多個異常,那麼呼叫時必須有對應多個catch進行針對性的處理。

推薦學習:《java教學

以上是完全掌握java異常處理機制原理與應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 完美數指南。這裡我們討論定義,如何在 Java 中檢查完美數?

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 隨機數產生器指南。在這裡,我們透過範例討論 Java 中的函數,並透過範例討論兩個不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。這裡我們透過範例討論簡介、如何使用 weka java、平台類型和優點。

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 史密斯數指南。這裡我們討論定義,如何在Java中檢查史密斯號?帶有程式碼實現的範例。

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

See all articles