Java異常處理詳解【入門篇】

Java異常處理詳解【入門篇】

  • Java異常處理詳解
    • 1. 異常的概念
    • 2. 異常的分類
      • 2.1 檢查異常(Checked Exception)
      • 2.2 非檢查異常(Unchecked Exception)
      • 2.3 錯誤(Error)
    • 3. 異常處理機制
      • 3.1 try-catch
      • 3.2 finally
      • 3.3 throw
      • 3.4 throws
    • 4. 自定義異常
    • 5. 異常處理的最佳實踐
    • 6. 實際應用案例
      • 案例1:文件讀取
      • 案例2:數據庫連接

Java異常處理詳解

異常處理是Java編程中的一個核心概念,旨在捕獲和處理程序運行時的錯誤,確保程序的健壯性和用戶體驗。

1. 異常的概念

在Java中,異常是程序執行過程中出現的意外事件,可能導致程序中斷。Java通過異常處理機制來捕獲和處理這些錯誤。

2. 異常的分類

2.1 檢查異常(Checked Exception)

檢查異常是在編譯時被檢查的,必須通過try-catch塊處理或在方法簽名中聲明。常見的包括:

  • IOException:處理I/O操作時的異常。
  • SQLException:數據庫操作中的異常。

2.2 非檢查異常(Unchecked Exception)

非檢查異常在運行時出現,通常由程序員的錯誤引起。包括:

  • NullPointerException:嘗試訪問空對象的成員。
  • ArrayIndexOutOfBoundsException:數組索引超出范圍。
  • ArithmeticException:數學運算異常,例如除零。

2.3 錯誤(Error)

錯誤表示系統級的問題,通常不由應用程序處理,例如:

  • OutOfMemoryError:JVM內存不足。
  • StackOverflowError:遞歸調用過深導致棧溢出。

3. 異常處理機制

3.1 try-catch

try塊包圍可能拋出異常的代碼,catch塊捕獲并處理特定類型的異常。

try {int result = 10 / 0; // 可能引發異常的代碼
} catch (ArithmeticException e) {System.out.println("除數不能為零: " + e.getMessage());
}

3.2 finally

finally塊中的代碼總會執行,無論是否發生異常,通常用于釋放資源。

try {// 可能拋出異常的代碼
} catch (Exception e) {System.out.println("捕獲異常");
} finally {System.out.println("清理資源");
}

3.3 throw

throw用于顯式拋出異常,可以拋出自定義或Java提供的異常。

public void checkAge(int age) {if (age < 18) {throw new IllegalArgumentException("年齡必須大于18歲");}
}

3.4 throws

throws用于方法聲明中指明該方法可能拋出的異常,調用者需要處理這些異常。

public void readFile(String filePath) throws IOException {FileReader file = new FileReader(filePath);// 讀文件的代碼
}

4. 自定義異常

Java允許開發者定義自己的異常類,以更好地描述特定的錯誤情況。

class CustomException extends Exception {public CustomException(String message) {super(message);}
}

使用自定義異常:

public void validate(int number) throws CustomException {if (number < 0) {throw new CustomException("數字不能為負");}
}

5. 異常處理的最佳實踐

  • 避免使用空的catch塊:空的catch塊可能隱藏錯誤,導致問題難以排查。
  • 捕獲特定的異常:捕獲特定的異常,而不是使用通用的Exception,以便精確處理錯誤。
  • 使用finally釋放資源:在finally塊中釋放資源,確保資源被正確關閉。
  • 記錄異常信息:記錄異常日志以便后續分析。
  • 適當使用自定義異常:自定義異常可以更好地反映業務邏輯錯誤,提高代碼可讀性。

6. 實際應用案例

案例1:文件讀取

處理文件讀取時,可能會遇到FileNotFoundExceptionIOException,需要用try-catch捕獲并處理。

public void readFile(String path) {try (BufferedReader reader = new BufferedReader(new FileReader(path))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (FileNotFoundException e) {System.out.println("文件未找到: " + e.getMessage());} catch (IOException e) {System.out.println("I/O錯誤: " + e.getMessage());}
}

案例2:數據庫連接

在數據庫操作中,可能會遇到SQLException,需要妥善處理,確保連接關閉。

public void queryDatabase() {Connection conn = null;try {conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "user", "password");// 執行查詢} catch (SQLException e) {System.out.println("數據庫錯誤: " + e.getMessage());} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {System.out.println("關閉連接錯誤: " + e.getMessage());}}}
}

通過對異常的合理處理,可以提高Java程序的健壯性,減少因異常導致的程序崩潰,提升用戶體驗。

版權聲明:
原創博主:牛哄哄的柯南
博主原文鏈接:https://keafmd.blog.csdn.net/
個人博客鏈接:https://keafmd.github.io/

看完如果對你有幫助,感謝點擊下面的點贊支持!
[哈哈][抱拳]

在這里插入圖片描述
加油!

共同努力!

Keafmd

感謝支持牛哄哄的柯南,期待你的三連+關注~~

keep accumulate for my dream【共勉】

???????????????????????????????????????????????????????↓ ? ↓ ? ↓ ? 合作 交流? ↓ ? ↓ ? ↓ ?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37606.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CesiumJS【Basic】- #025 生成kml/kmz文件

文章目錄 生成kml/kmz文件1 目標2 代碼2.1 main.ts生成kml/kmz文件 1 目標 生成kml/kmz文件(kmz是kml的壓縮格式) 2 代碼 首先添加點線面并且賦予不同的顏色,然后導出生成kml/kmz文件 2.1 main.ts import * as Cesium from "cesium";const viewer = new Ces…

微服務 | Springboot整合GateWay+Nacos實現動態路由

1、簡介 路由轉發 執行過濾器鏈。 ? 網關&#xff0c;旨在為微服務架構提供一種簡單有效的統一的API路由管理方式。同時&#xff0c;基于Filter鏈的方式提供了網關的基本功能&#xff0c;比如&#xff1a;鑒權、流量控制、熔斷、路徑重寫、黑白名單、日志監控等。 基本功能…

YOLO:一種革命性的實時目標檢測算法

目標檢測是計算機視覺領域中的一項基礎任務&#xff0c;它涉及到在圖像或視頻幀中識別和定位多個目標對象。傳統的目標檢測方法&#xff0c;如R-CNN系列算法&#xff0c;雖然在精度上取得了不錯的成績&#xff0c;但它們通常需要多步驟的處理過程&#xff0c;導致檢測速度較慢&…

linux 刪除文件(批量刪除文件)

一般的刪除文件的操作 刪除幾個文件 rm 文件1 文件2 刪除文件夾下面所有文件 rm * -rf 刪除某些固定字母開頭的文件 rm xxx* 刪除一類文件 rm .txt 批量刪除文件 首先查找我們要刪除的某類批量的文件&#xff1a; find . -maxdepth 1 -regex “.ws.” maxdepth參數為1表示只在當…

4054充電芯片經常燒壞?Type-c口的燒壞充電芯片如何去解決

4054是一款常用的鋰電池充電管理芯片&#xff0c;廣泛應用于各種電子設備中。然而&#xff0c;有時候4054會出現經常燒壞的情況&#xff0c;故而讓客戶對我們的產品質量產生的擔憂。特別是現如今快充的時代到來&#xff0c;快充頭的使用&#xff0c;出現了更多4054燒壞的現象。…

php開發的系統/軟件如何實現閉源?

想到這個問題的起因是想找一款更好用的服務器管理軟件&#xff0c; 看到CPanel的介紹“對國際主機市場了解的朋友一定聽說過cPanel&#xff0c;它是世界上功能強大&#xff0c;容易使用&#xff0c;因而比較受用戶歡迎的虛擬主機控制系統。cPanel 是一套在網頁寄存業中最享負盛…

在python docker中安裝ESL庫

概述 功能需求&#xff0c;把python腳本移植到docker中。 因為python腳本中有使用freeswitch的ESL接口&#xff0c;所以需要安裝python-ESL依賴庫。 本文記錄在python:3.10.14-slim的docker鏡像上編譯安裝python-ESL依賴庫的流程。 環境 docker engine: Version 24.0.6 d…

MySQL的三種驅動類型

MySQL 支持多種驅動類型&#xff0c;常見的包括&#xff1a; MySQL Native Driver (mysqlnd)&#xff1a; 這是MySQL官方推薦的驅動類型&#xff0c;它是PHP的一個內置擴展。mysqlnd 提供了更高的性能和更好的兼容性&#xff0c;支持MySQL 4.1及以上版本。 MySQL Improved Ext…

在.NET Core中,config和ConfigureServices的區別和作用

在.NET Core中&#xff0c;config和ConfigureServices是兩個不同的概念&#xff0c;它們在應用程序的啟動和配置過程中扮演著不同的角色。 ConfigureServices&#xff1a;這是ASP.NET Core應用程序中的一個方法&#xff0c;位于Startup類的內部。它的作用是配置依賴注入(DI)容器…

湘潭大學概率論總結

文章目錄 前言試卷結構反思第一個填空題某個大題矩估計和最大似然估計算方差最后 前言 自己其實寒假的時候就想學這個了&#xff0c;但是那個時候在acm訓練&#xff0c;就沒有學&#xff0c;但是3月份退隊了&#xff0c;還是沒有學&#xff0c;完全就是自己太拖延的原因&#…

淺談返利app架構設計

淺談返利app架構設計 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們來探討返利App的架構設計&#xff0c;這是一個技術性的話題&#xff0c;我們將深入…

【ES】--Elasticsearch的翻頁詳解

目錄 一、前言二、from+size淺分頁1、from+size導致深度分頁問題三、scroll深分頁1、scroll原理2、scroll可以返回總計數量四、search_after深分頁1、search_after避免深度分頁問題一、前言 ES的分頁常見的主要有三種方式:from+size淺分頁、scroll深分頁、search_after分頁。…

基于Java微信小程序同城家政服務系統設計和實現(源碼+LW+調試文檔+講解等)

&#x1f497;博主介紹&#xff1a;?全網粉絲10W,CSDN作者、博客專家、全棧領域優質創作者&#xff0c;博客之星、平臺優質作者、專注于Java、小程序技術領域和畢業項目實戰?&#x1f497; &#x1f31f;文末獲取源碼數據庫&#x1f31f;感興趣的可以先收藏起來&#xff0c;還…

Nginx配置達夢數據庫代理及Nginx模塊內容總結

Nginx 代理達夢數據庫配置 叨叨達夢數據庫代理Nginx模塊說明stream模塊main 全局塊event塊http塊server塊location塊 本文參考了 https://blog.csdn.net/qq_42402854/article/details/132843413 叨叨 由于公司網絡安全問題&#xff0c;應用服務器端開開放需要走策略申請&#…

C#面:舉列 a=10,b=15,在不用第三方變量的前提下,把a,b的值互換

要在不使用第三方變量的前提下交換a和b的值&#xff0c;可以使用異或運算。異或運算的特性是&#xff0c;對于兩個相同的數進行異或運算&#xff0c;結果為0&#xff1b;對于任意數與0進行異或運算&#xff0c;結果為該數本身。因此&#xff0c;可以通過多次異或運算來實現變量…

【Sublime】Sublime Text 中運行終端

Sublime Text 本身并不是一個終端仿真器&#xff0c;可以使用插件來在 Sublime Text 中集成終端功能。最常用的插件之一是“Terminal”。 使用“Terminal”插件在 Sublime Text 中啟動終端 以下是安裝和使用該插件的步驟&#xff1a; 安裝 Package Control&#xff1a; 如果你…

面試突擊:HashMap 源碼詳解

本文已收錄于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持續更新&#xff09; 數據結構 JDK1.8 之前 JDK1.8 之前 HashMap 采用 數組和鏈表 結合的數據結構。如下圖&#xff1a; HashMap 將 key 的 hashCode 經過擾動函數處理過后得到 hash 值&#…

網絡編程客戶端和服務端連接流程

服務器端&#xff1a;socket()-->bind( )-->listen()-->accept()-->read()/write()--->close()socket()//創建套接字 bind()//命名socket&#xff0c;分配套接字地址 listen()//監聽狀態&#xff0c;等待連接請求狀態 accept()//允許連接(被動連接) read()/writ…

java第二十九課 —— 斷點 | 零錢通項目

斷點調試&#xff08;debug&#xff09; 實際需求 在開發中&#xff0c;新手程序員在查找錯誤時&#xff0c;這時老程序員就會溫馨提示&#xff0c;可以用斷點調試步一步的看源碼執行的過程&#xff0c;從而發現錯誤所在。 重要提示&#xff1a;在斷點調試過程中&#xff0c;…

Open3D(C++) 刪除點云中重復的點

目錄 一、算法原理1、重疊點2、主要函數二、代碼實現三、結果展示本文由CSDN點云俠原創,原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲與GPT。 一、算法原理 1、重疊點 原始點云克隆一份 ??構造重疊區域 ??合并點云獲得重疊點 2、主要…