JavaSE核心知識點02面向對象編程02-08(異常處理)

🤟致敬讀者

  • 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺

📘博主相關

  • 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息

文章目錄

    • JavaSE核心知識點02面向對象編程02-08(異常處理)
      • **一、異常處理的核心概念**
        • **1. 什么是異常?**
        • **2. Java異常分類**
      • **二、異常處理的關鍵字**
        • **1. try-catch-finally**
        • **2. throws**
        • **3. throw**
      • **三、常見異常類型與處理**
        • **1. 常見異常示例**
        • **2. 處理多個異常**
      • **四、自定義異常**
        • **1. 創建自定義異常類**
        • **2. 使用自定義異常**
      • **五、最佳實踐與常見陷阱**
        • **1. 最佳實踐**
        • **2. 常見陷阱**
      • **六、總結與練習**
        • **1. 關鍵點總結**
        • **2. 練習題目**


📃文章前言

  • 🔷文章均為學習工作中整理的筆記。
  • 🔶如有錯誤請指正,共同學習進步。

好的!作為Java新手,掌握異常處理是編寫健壯程序的關鍵。以下是一份詳細的Java異常處理指南,包含基礎概念、使用方法和實際示例:


JavaSE核心知識點02面向對象編程02-08(異常處理)

一、異常處理的核心概念

1. 什么是異常?
  • 異常(Exception):程序運行時發生的非正常情況,會中斷正常的指令流。
  • 異常處理的必要性:避免程序崩潰、提供友好錯誤提示、確保資源正確釋放。
2. Java異常分類

Java異常體系以 Throwable 為根類,分為兩類:

  • Error:嚴重錯誤(如內存溢出 OutOfMemoryError),程序無法處理。
  • Exception:可處理的異常,分為兩類:
    • Checked Exception(檢查型異常):編譯時強制檢查(如 IOException)。
    • Unchecked Exception(非檢查型異常):運行時異常(如 NullPointerExceptionArithmeticException)。

二、異常處理的關鍵字

1. try-catch-finally
try {// 可能拋出異常的代碼int result = 10 / 0; // 拋出 ArithmeticException
} catch (ArithmeticException e) {// 捕獲并處理異常System.out.println("除數不能為零!");
} finally {// 無論是否發生異常,都會執行的代碼(常用于釋放資源)System.out.println("執行finally塊");
}
2. throws

聲明方法可能拋出的異常,由調用者處理:

public void readFile() throws IOException {FileReader file = new FileReader("test.txt");// ...
}
3. throw

手動拋出異常對象:

if (age < 0) {throw new IllegalArgumentException("年齡不能為負數!");
}

三、常見異常類型與處理

1. 常見異常示例
異常類型觸發場景處理建議
NullPointerException調用 null 對象的方法或屬性檢查對象是否為 null
ArrayIndexOutOfBounds訪問數組越界位置檢查數組索引范圍
IOException文件讀寫失敗(如文件不存在)使用 try-catchthrows
NumberFormatException字符串轉換為數字失敗(如 "abc"校驗輸入是否為有效數字
2. 處理多個異常
try {FileInputStream fis = new FileInputStream("file.txt");int data = fis.read();
} catch (FileNotFoundException e) {System.out.println("文件未找到!");
} catch (IOException e) {System.out.println("讀取文件失敗!");
} catch (Exception e) {// 兜底處理(不建議濫用)System.out.println("未知錯誤!");
}

四、自定義異常

1. 創建自定義異常類
public class InsufficientBalanceException extends Exception {public InsufficientBalanceException(String message) {super(message);}
}
2. 使用自定義異常
public void withdraw(double amount) throws InsufficientBalanceException {if (amount > balance) {throw new InsufficientBalanceException("余額不足!");}balance -= amount;
}

五、最佳實踐與常見陷阱

1. 最佳實踐
  • 精準捕獲:避免捕獲過于寬泛的異常(如直接 catch (Exception e))。
  • 資源釋放:使用 try-with-resources(Java 7+)自動關閉資源:
    try (FileInputStream fis = new FileInputStream("file.txt")) {// 使用資源
    } catch (IOException e) {e.printStackTrace();
    }
    
  • 記錄異常:使用日志工具(如 log4j)記錄異常堆棧:
    catch (SQLException e) {logger.error("數據庫操作失敗", e);
    }
    
2. 常見陷阱
  • 忽略異常:空 catch 塊會隱藏問題。
    // 錯誤示例!
    try {// 可能出錯的代碼
    } catch (Exception e) {// 空處理
    }
    
  • 在finally中return:可能導致異常被覆蓋。
    try {// ...
    } finally {return; // 不推薦!
    }
    

六、總結與練習

1. 關鍵點總結
  • 分類:理解Checked vs Unchecked異常的區別。
  • 處理方式try-catchthrowsthrow的適用場景。
  • 資源管理:優先使用 try-with-resources 替代手動關閉。
2. 練習題目
  1. 編寫代碼讀取文件內容,處理可能的 FileNotFoundException
  2. 實現一個除法方法,當除數為零時拋出 ArithmeticException
  3. 自定義一個 InvalidEmailException,并在用戶輸入無效郵箱時拋出。

通過實際編碼練習,逐步掌握異常處理的核心技巧!遇到問題時,可查閱 Java官方文檔 或調試工具(如IDE的斷點功能)。


📜文末寄語

  • 🟠關注我,獲取更多內容。
  • 🟡技術動態、實戰教程、問題解決方案等內容持續更新中。
  • 🟢《全棧知識庫》技術交流和分享社區,集結全棧各領域開發者,期待你的加入。
  • 🔵?加入開發者的《專屬社群》,分享交流,技術之路不再孤獨,一起變強。
  • 🟣點擊下方名片獲取更多內容🍭🍭🍭👇

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

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

相關文章

【JVM-GC調優】

一、預備知識 掌握GC相關的VM參數&#xff0c;會基本的空間調整掌握相關工具明白一點&#xff1a;調優跟應用、環境有關&#xff0c;沒有放之四海而皆準的法則 二、調優領域 內存鎖競爭cpu占用io 三、確定目標 【低延遲】&#xff1a;CMS、G1&#xff08;低延遲、高吞吐&a…

基于單片機的電子法頻率計

一、電子計數法測頻率原理 通過門控控制閘門開關&#xff0c;閘門時間T自己設定&#xff0c;計數器計數脈沖個數N&#xff08;也就是待測信號&#xff09;&#xff0c;N個脈沖的時間間隔為δt,倒數即為信號的頻率f,由此 δtT/N fN/T——信號頻率 根據公式&#xff0c;如果考慮…

【C/C++】跟我一起學_C++同步機制效率對比與優化策略

文章目錄 C同步機制效率對比與優化策略1 效率對比2 核心同步機制詳解與適用場景3 性能優化建議4 場景對比表5 總結 C同步機制效率對比與優化策略 多線程編程中&#xff0c;同步機制的選擇直接影響程序性能與資源利用率。 主流同步方式: 互斥鎖原子操作讀寫鎖條件變量無鎖數據…

判斷兩臺設備是否在同一局域網內的具體方法

以下是判斷兩臺設備是否在同一局域網內的具體方法&#xff1a; 1. 檢查IP地址和子網掩碼 操作步驟&#xff1a; Windows系統&#xff1a; 按 Win R 鍵&#xff0c;輸入 cmd 并回車。輸入 ipconfig&#xff0c;查看 IPv4 地址 和 子網掩碼&#xff08;如 192.168.1.5/255.255.2…

在R語言中如何將列的名字改成別的

在 R 中&#xff0c;更改數據框&#xff08;data frame&#xff09;中列的名字可以通過多種方法實現。以下是幾種常見的方法&#xff1a; 方法 1&#xff1a;使用 names() 函數 names() 函數可以獲取或設置數據框的列名。 示例 假設我們有一個數據框 data&#xff1a; dat…

JUC并發編程(上)

一、JUC學習準備 核心知識點&#xff1a;進程、線程、并發&#xff08;共享模型、非共享模型&#xff09;、并行 預備知識&#xff1a; 基于JDK8,對函數式編程、lambda有一定了解 采用了slf4j打印日志 采用了lombok簡化java bean編寫 二、進程與線程 進程和線程概念 兩者對比…

單地平面6層PCB設計實戰:如何兼顧電源與信號完整性?

摘要&#xff1a;面對復雜系統&#xff08;SDRAM、WiFi、電機驅動等&#xff09;且僅有1層地平面的6層板設計挑戰&#xff0c;本文從層疊規劃、電源噪聲抑制、高速信號處理等角度&#xff0c;總結可落地的設計技巧與避坑指南。 一、層疊設計&#xff1a;6層板如何“擠”出最優布…

spark:map 和 flatMap 的區別(Scala)

場景設定 假設有一個包含句子的 RDD&#xff1a; scala val rdd sc.parallelize(List("Hello World", "Hi Spark")) 目標是&#xff1a;將每個句子拆分成單詞。 1. 用 map 的效果 代碼示例 scala val resultMap rdd.map(sentence > sentence…

基于VSCode+PlatformIO環境的ESP8266的HX1838紅外模塊

以下是針對ESP8266開發板的紅外遙控解碼系統開發教程&#xff0c;基于VSCodePlatformIO環境編寫 一、概述 本實驗通過ESP8266開發板實現&#xff1a; 紅外遙控信號解碼自定義按鍵功能映射串口監控輸出基礎設備控制&#xff08;LED&#xff09; 硬件組成&#xff1a; NodeMC…

Kubernetes排錯(十四):Pod狀態異常排查手冊

當你在凌晨三點收到告警&#xff0c;發現Pod在崩潰循環中掙扎時&#xff0c;如何快速定位問題&#xff1f;本文將為你梳理一套生產環境通用的Pod排錯流程&#xff0c;并附上救火隊員必備的實用命令清單&#xff01; 一、5分鐘快速定位&#xff1a;四步鎖定問題方向 步驟1&…

醫院藥品管理系統(準備工作)

準備工作 創建數據庫表 搭建Springboot框架 創建工程 定位maven 其他準備工作 創建數據庫表 建了九張表 搭建Springboot框架 創建工程 定位maven 把鏡像改為國內的 其他準備工作 安裝Lombok插件 額外添加依賴 如果添加依賴的過程中一直爆紅&#xff0c;可以刷新…

SpringBoot異步處理@Async深度解析:從基礎到高階實戰

一、異步編程基礎概念 1.1 同步 vs 異步 特性同步異步執行方式順序執行&#xff0c;阻塞調用非阻塞&#xff0c;調用后立即返回線程使用單線程完成所有任務多線程并行處理響應性較差&#xff0c;需等待前任務完成較好&#xff0c;可立即響應新請求復雜度簡單直觀較復雜&#…

簡單的強化學習舉例

1&#xff0c;定義獎勵函數 首先&#xff0c;需要根據具體的任務需求來定義獎勵函數。例如&#xff0c;對于機器人導航任務&#xff0c;可以根據機器人與目標點的距離來定義獎勵函數&#xff1a; import numpy as npdef navigation_reward(robot_position, target_position):…

css背景相關

背景書寫 background: url(src); // 注意&#xff1a;在寫動態樣式時&#xff0c;backgournd賦值格式錯誤&#xff0c;是不會在瀏覽器dom的style上顯示的 // 但是可以創建不可見的img&#xff0c;預加載來提高性能背景也會加載圖片資源 同img的src一樣&#xff0c;background也…

opencascade.js stp vite 調試筆記

Hello, World! | Op enCascade.js cnpm install opencascade.js cnpm install vite-plugin-wasm --save-dev 當你不知道文件寫哪的時候trae還是有點用的 ‘’‘ import { defineConfig } from vite; import wasm from vite-plugin-wasm; import rollupWasm from rollup/plug…

線程的一些事(2)

在java中&#xff0c;線程的終止&#xff0c;是一種“軟性”操作&#xff0c;必須要對應的線程配合&#xff0c;才能把終止落實下去 然而&#xff0c;系統原生的api其實還提供了&#xff0c;強制終止線程的操作&#xff0c;無論線程執行到哪&#xff0c;都能強行把這個線程干掉…

BGP實驗練習1

需求&#xff1a; 要求五臺路由器的環回地址均可以相互訪問 需求分析&#xff1a; 1.圖中存在五個路由器 AR1、AR2、AR3、AR4、AR5&#xff0c;分屬不同自治系統&#xff08;AS&#xff09;&#xff0c;AR1 在 AS 100&#xff0c;AR2 - AR4 在 AS 200&#xff0c;AR5 在 AS …

滑動窗口——將x減到0的最小操作數

題目&#xff1a; 這個題如果我們直接去思考方法是很困難的&#xff0c;因為我們不知道下一步是在數組的左還是右操作才能使其最小。正難則反&#xff0c;思考一下&#xff0c;無論是怎么樣的&#xff0c;最終這個數組都會分成三個部分左中右&#xff0c;而左右的組合就是我們…

C++ RAII機制

RAII&#xff08;Resource Acquisition Is Initialization&#xff09;是一種編程范式&#xff0c;核心思想是&#xff1a;資源的生命周期與對象綁定——對象創建時獲取資源&#xff0c;對象銷毀時自動釋放資源。這種機制通過構造函數和析構函數的配對執行&#xff0c;確保資源…

連續抵消解碼器--Successive Cancellation decoder(SC 解碼器)

在這里&#xff0c;我們來看一下&#xff08;Arikan&#xff0c;2009&#xff09;中提供的連續取消解碼算法。 顧名思義&#xff0c;SC解碼算法從u0開始按順序解碼比特。 凍結的比特節點總是被解碼為0。 在解碼ui時&#xff0c;根據以下規則使用由向量表示的可用比特來解碼u…