JAVA異常體系

在 Java 里,異常體系是其錯誤處理機制的核心內容,它能夠幫助開發者有效應對程序運行時出現的各種意外狀況。

異常體系的基本架構

它主要包含兩個重要分支:

  1. Error(錯誤):這類異常是程序自身無法處理的嚴重問題,像OutOfMemoryErrorStackOverflowError就屬于此類。一般而言,開發者不需要針對這類異常編寫特別的處理代碼。
  2. Exception(異常):這是程序在運行過程中能夠捕獲和處理的異常。它又可以進一步細分為:
    • 受檢查異常(Checked Exception):這類異常在編譯階段就會被檢查,例如IOExceptionSQLException。程序必須對它們進行捕獲或者聲明拋出。
    • 運行時異常(RuntimeException):也被稱作非受檢查異常,像NullPointerExceptionArrayIndexOutOfBoundsException都屬于此類。編譯時不會強制要求處理這類異常。

?

?Error

在 Java 中,ErrorThrowable類的子類,用于表示系統級的嚴重故障,通常無法通過程序恢復。

一、特點

  • 不可恢復:表示 JVM 或系統級的嚴重問題,程序通常無法處理。
  • 不強制捕獲:編譯器不會檢查 Error,也不要求代碼處理它。
  • 避免捕獲:捕獲 Error 可能導致程序進入不穩定狀態。

二、常見的 Error 類型

1.?內存相關錯誤

OutOfMemoryError:內存不足,無法分配對象。

// 示例:創建過大的數組可能導致OutOfMemoryError
byte[] array = new byte[Integer.MAX_VALUE];

?StackOverflowError:方法調用棧深度超過限制(常見于遞歸無終止條件)。

// 示例:無限遞歸導致StackOverflowError
public void recursive() {recursive(); // 最終棧溢出
}

2.?類加載相關錯誤

  • NoClassDefFoundError:編譯時存在的類,運行時找不到(如依賴庫缺失)。
  • ClassFormatError:類文件格式錯誤(如.class 文件損壞)。

3.?JVM 內部錯誤

  • InternalError:JVM 內部發生錯誤(如 JIT 編譯器故障)。
  • VirtualMachineError:JVM 崩潰或無法繼續運行的嚴重錯誤。

Exception

受檢查異常(Checked Exception)

特點

  • 在編譯階段就會被編譯器檢查。
  • 程序必須對這類異常進行處理,處理方式有兩種:要么使用try-catch語句捕獲,要么在方法簽名中用throws聲明拋出
  • 一般是由程序外部的因素引發的,比如文件系統、網絡或者數據庫等出現問題。

常見示例

  1. IOException:在進行輸入輸出操作時,如果出現錯誤,就會拋出此異常。例如,嘗試讀取一個不存在的文件時。
  2. SQLException:在訪問數據庫時,如果出現錯誤,會引發該異常。比如 SQL 語句執行失敗。
  3. ClassNotFoundException:當使用反射機制加載類,卻找不到指定的類時,會產生此異常。
  4. InterruptedException:當一個線程被另一個線程中斷時,會拋出此異常。

處理方式?

import java.io.FileInputStream;
import java.io.IOException;public class CheckedExceptionExample {public static void main(String[] args) {try {readFile(); // 必須捕獲或聲明拋出} catch (IOException e) {e.printStackTrace();}}public static void readFile() throws IOException {FileInputStream file = new FileInputStream("non_existent_file.txt");}
}

運行時異常(RuntimeException)

特點

  • 屬于RuntimeException的子類
  • 編譯時不會強制要求處理這類異常,也就是說可以不捕獲,也不用在方法簽名中聲明。
  • 通常是由程序中的邏輯錯誤導致的,比如空指針引用、數組越界等

常見示例

  1. NullPointerException:當嘗試訪問空對象的方法或屬性時會拋出此異常
String str = null;
System.out.println(str.length()); // 拋出NullPointerException

??????2.ArrayIndexOutOfBoundsException:訪問數組時,如果使用的索引超出了數組的有效范圍,就會引發該異常。

int[] arr = new int[5];
System.out.println(arr[10]); // 拋出ArrayIndexOutOfBoundsException

??????3.ArithmeticException:進行數學運算時,若出現非法操作,比如除以零,就會拋出此異常。

int result = 10 / 0; // 拋出ArithmeticException

??????4.IllegalArgumentException:當傳入的參數不符合方法的要求時,會產生該異常。

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

?

?受檢查異常 vs 運行時異常

對比項受檢查異常(Checked Exception)運行時異常(RuntimeException)
編譯時檢查必須處理,否則編譯不通過不強制要求處理
繼承關系繼承自Exception類(但不包括RuntimeException繼承自RuntimeException
常見場景外部資源訪問(文件、網絡、數據庫等)程序邏輯錯誤(空指針、數組越界等)
處理方式捕獲(try-catch)或聲明拋出(throws)可不處理,通過代碼邏輯避免

異常和錯誤的區別

對比項異常(Exception)錯誤(Error)
設計目的表示程序可處理的意外情況,如文件不存在、網絡中斷。表示系統級不可恢復的嚴重故障,如內存溢出、棧溢出。
處理要求受檢查異常必須被捕獲或聲明拋出;
運行時異常可選擇性處理。
通常不捕獲,也不應該嘗試處理,而是讓程序終止。
常見子類IOException,?SQLException,?NullPointerExceptionOutOfMemoryError,?StackOverflowError,?NoClassDefFoundError
代碼示例java<br>try {<br> FileInputStream file = new FileInputStream("test.txt");<br>} catch (FileNotFoundException e) {<br> e.printStackTrace();<br>}<br>java<br>public void recursive() {<br> recursive(); // 最終導致StackOverflowError<br>}<br>

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

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

相關文章

vue 去掉右邊table的下拉條與下面的白色邊框并補充滿

::v-deep table {width: 100% !important; } ::v-deep .el-table::after, .el-table::before {display: none !important; }/* 隱藏滾動條但保留滾動功能 */ ::v-deep .el-table__body-wrapper::-webkit-scrollbar {width: 0 !important;height: 0 !important; }::v-deep .el-t…

uniapp+vue3+uview來開發我們的項目

前言&#xff1a; 就像我們vue的web的框架element、iview等一樣&#xff0c;我們的uni-app開發也有適合的他的框架&#xff0c;除了他本身的擴展組件以外&#xff0c;第三方好用的就是就是uview了。 實現效果&#xff1a; 官網信息&#xff1a; vue2版本&#xff1a;uview-ui …

數據倉庫:企業數據管理的核心引擎

一、數據倉庫的由來 數據倉庫&#xff08;Data Warehouse, DW&#xff09;概念的誕生源于企業對數據價值的深度挖掘需求。在1980年代&#xff0c;隨著OLTP&#xff08;聯機事務處理&#xff09;系統在企業中的普及&#xff0c;傳統關系型數據庫在處理海量數據分析時顯露出明顯瓶…

YOLOv12模型部署(保姆級)

一、下載YOLOv12源碼 1.通過網盤分享的文件&#xff1a;YOLOv12 鏈接: https://pan.baidu.com/s/12-DEbWx1Gu7dC-ehIIaKtQ 提取碼: sgqy &#xff08;網盤下載&#xff09; 2.進入github克隆YOLOv12源碼包 二、安裝Anaconda/pycharm 點擊獲取官網鏈接(anaconda) 點擊獲取…

一篇解決Redis:持久化機制

目錄 認識持久化 持久化方案 RDB&#xff08;Redis DataBase&#xff09; 手動觸發 自動觸發 小結 AOF(Append-Only File) AOF緩沖區刷新機制 AOF重寫機制 AOF重寫流程 ?編輯 混合持久化 認識持久化 我們都知道Mysql有四大特征&#xff0c;原子性&#xff0c;持久…

從 Vue3 回望 Vue2:事件總線的前世今生

從 Vue3 回望 Vue2&#xff1a;事件總線的前世今生 以 Vue3 開發者視角回顧 Vue2 中事件總線機制 的文章。文章將圍繞事件總線的緣起、用法、局限與演進展開&#xff0c;幫助 Vue3 開發者理解 Vue2 通信方式的歷史意義及現代替代方案。 一、前言&#xff1a;Vue3 時代&#xff…

CSS結構性偽類、UI偽類與動態偽類全解析:從文檔結構到交互狀態的精準選擇

一、結構性偽類選擇器&#xff1a;文檔樹中的位置導航器 結構性偽類選擇器是CSS中基于元素在HTML文檔樹中的層級關系、位置索引或結構特征進行匹配的一類選擇器。它們無需依賴具體的類名或ID&#xff0c;僅通過文檔結構即可精準定位元素&#xff0c;是實現響應式布局和復雜文檔…

【SSL證書系列】SSL證書工作原理解讀

SSL&#xff08;Secure Sockets Layer&#xff09;及其繼任者TLS&#xff08;Transport Layer Security&#xff09;是用于保護網絡通信安全的加密協議。SSL證書是實現HTTPS協議的核心&#xff0c;其工作原理涉及加密技術、身份驗證和信任機制。以下是其工作原理的詳細分步解析…

第二十四天打卡

import os os.getcwd() os.listdir() path_a r"C:\Users\renshuaicheng\Documents" path_b "MyProjectData" file "results.csv" file_path os.path.join(path_a,path_b,file) file_path import osstart_directory os.getcwd() # 假設這個目…

【CUDA】Sgemm單精度矩陣乘法(下)

目錄 前言1. 優化技巧5&#xff1a;使用register模擬二級緩存&#xff08;內積轉外積&#xff09;2. 優化技巧6&#xff1a;使用register模擬二級緩存 float43. 優化技巧7&#xff1a;global memory轉置再存放shared memory4. 優化技巧8&#xff1a;使用double buffer加速矩陣…

【1000以內具有12個以上因子的整數并輸出它的因子】2021-12-27

緣由c語言輸入1000以內具有12個以上因子的整數 并輸出它的因子-編程語言-CSDN問答 int 求因子個數(int 數, int* 因子 { 0 }) {//緣由https://bbs.csdn.net/topics/399168406int 和 0, 求 1, 商 0, 含 0;//因子不含1和數本身while (求 < (商 數 / 求))if (!(數 % 求)…

C#中的dynamic與var:看似相似卻迥然不同

在C#編程的世界里&#xff0c;var和dynamic這兩個關鍵字常常讓初學者感到困惑。它們看起來都在定義變量時省略了顯式類型聲明&#xff0c;但實際上它們的工作方式和應用場景有著天壤之別。今天&#xff0c;讓我們一起揭開這兩個關鍵字的神秘面紗。 var&#xff1a;編譯時的類型…

流速儀數據處理及流量斷面線繪制

1 需求描述 在實際航道測量項目中&#xff0c;有測量斷面線流量流速的需求&#xff0c;得使用流速儀在現場進行測量&#xff0c;相關操作在之前已經寫了記錄。本次手冊記錄后期數據處理與流量線繪制&#xff0c;以該區域為例。 流速儀設備操作說明 2 規范要求 3 流量斷面表格…

購物車構件示例

通用購物車構件設計 注:代碼僅用于演示原理,不可用于生產環境。 一、設計目標 設計一個高度可復用的購物車構件,具備以下特點: 與具體業務系統解耦支持多種應用場景(商城、積分系統等)提供標準化接口易于集成和擴展二、核心架構設計 1. 分層架構 ┌─────────…

數據結構·字典樹

字典樹trie 顧名思義&#xff0c;在一個字符串的集合里查詢某個字符串是否存在樹形結構。 樹存儲方式上用的是結構體數組&#xff0c;類似滿二叉樹的形式。 模板 定義結構體和trie 結構體必須的內容&#xff1a;當前結點的字符&#xff0c;孩子數組可選&#xff1a;end用于查…

ES面試題系列「一」

1、Elasticsearch 是什么&#xff1f;它與傳統數據庫有什么區別&#xff1f; 答案&#xff1a;Elasticsearch 是一個基于 Lucene 的分布式、開源的搜索和分析引擎&#xff0c;主要用于處理大量的文本數據&#xff0c;提供快速的搜索和分析功能。與傳統數據庫相比&#xff0c;E…

2025年6月一區SCI-不實野燕麥優化算法Animated Oat Optimization-附Matlab免費代碼

引言 近年來&#xff0c;在合理框架內求解優化問題的元啟發式算法的發展引起了全球科學界的極大關注。本期介紹一種新的元啟發式算法——不實野燕麥優化算法Animated Oat Optimization algorithm&#xff0c;AOO。該算法模擬了不實野燕麥的3種獨特行為&#xff0c;于2025年6月…

Agent Builder API - Agent Smith 擴展的后端服務(開源代碼)

?一、軟件介紹 文末提供程序和源碼下載 Agent Builder API - Agent Smith 擴展的后端服務&#xff08;開源代碼&#xff09;手動設置&#xff1a;在本地計算機中克隆此存儲庫并啟動 python FAST API 服務器。&#xff08;可選&#xff09;安裝并設置 Mongo DB。Dev Container…

C及C++的SOAP協議庫

一.gSOAP gSOAP 是一個功能強大的開源工具包&#xff0c;專為 C 和 C 設計&#xff0c;用于快速開發基于 SOAP 協議的 Web 服務和客戶端。 1.協議支持 SOAP 版本&#xff1a;完整支持 SOAP 1.1/1.2 規范&#xff0c;包括消息格式、編碼規則和錯誤處理。 傳輸協議&#xff1a…

html5+css3實現傅里葉變換的動態展示效果(僅供參考)

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>傅里葉變換的動態展示效果</title><sty…