187. Java 異常 - 什么是異常?

文章目錄

  • 187. Java 異常 - 什么是異常?
    • 🚨 什么是“異常”?
      • ? 定義:
    • 🧱 異常對象中包含什么?
    • Java 是怎么“處理”異常的?
    • 🧯 什么是異常處理器(Exception Handler)?
    • 🧭 示例:調用棧中的異常傳遞過程
    • ?? 如果沒人處理異常會怎樣?
    • 💡 為什么使用異常比傳統錯誤碼更好?
    • 🔍 常見異常類型
    • 🧾 小結
    • 🎯 建議實踐

187. Java 異常 - 什么是異常?


🚨 什么是“異常”?

在程序運行過程中,有些情況是“非正常的” —— 比如文件找不到、除數為零、數組越界……這些突發事件打斷了程序原本的運行流程,這就是 異常(Exception)

? 定義:

異常是程序運行時發生的、打斷正常執行流程的一種事件。

當異常發生時:

  1. 當前方法會 創建一個異常對象,這個對象封裝了錯誤信息;
  2. 然后將這個對象 拋給 Java 運行時系統
  3. 運行時系統會尋找可以“處理”這個異常的代碼塊。

這個過程被稱為:拋出異常(throwing an exception)


🧱 異常對象中包含什么?

異常對象中通常包含以下信息:

  • 異常的類型(如 NullPointerExceptionIOException 等)
  • 錯誤發生時的程序狀態(棧軌跡、具體位置等)
  • 可選的錯誤消息(message

Java 是怎么“處理”異常的?

關鍵概念:調用棧(Call Stack)

可以想象程序運行是一個“方法接著方法調用”的過程。發生異常時,Java 會沿著調用棧往上“尋找處理者” 👇

main()methodA()methodB()methodC() ← 異常發生在這里

Java 會從 methodC 開始,逐層往上查找,尋找能處理此異常的方法。


🧯 什么是異常處理器(Exception Handler)?

異常處理器是一段能夠“捕獲并處理”異常的代碼塊。通常使用 try-catch 語句編寫:

try {// 可能出錯的代碼int result = 10 / 0;
} catch (ArithmeticException e) {// 處理異常的代碼System.out.println("算術異常:除數不能為0!");
}

如果某個方法能處理該異常類型,它就 “捕獲(catch)” 了這個異常,程序可以繼續運行。


🧭 示例:調用棧中的異常傳遞過程

public class Demo {public static void main(String[] args) {methodA();}public static void methodA() {methodB();}public static void methodB() {methodC();}public static void methodC() {int result = 10 / 0; // ArithmeticException}
}

此代碼運行時會報錯:

Exception in thread "main" java.lang.ArithmeticException: / by zeroat Demo.methodC(Demo.java:14)at Demo.methodB(Demo.java:10)at Demo.methodA(Demo.java:6)at Demo.main(Demo.java:2)

? Java 沿著調用棧找,但沒有任何一個方法提供處理器,所以程序崩潰。


?? 如果沒人處理異常會怎樣?

如果異常從最底層冒到最頂層(main 方法),仍無人處理:

  • 當前線程終止
  • 如果是主線程 → 整個程序崩潰

💡 為什么使用異常比傳統錯誤碼更好?

傳統方式(C 風格):

int status = doSomething();
if (status == -1) {// 錯誤處理邏輯
}

Java 異常的優勢在于:

特點好處
? 非常規返回值? 不影響主邏輯的返回
? 忽略容易? 統一強制檢查
? 錯誤信息不集中? 異常對象封裝信息
? 嵌套判斷混亂? try-catch 語義清晰

🔍 常見異常類型

異常類型說明
NullPointerException訪問 null 引用的方法或字段
ArrayIndexOutOfBoundsException數組越界
ArithmeticException除以零等算術錯誤
IOExceptionI/O 操作失敗
ClassNotFoundException類未找到

🧾 小結

  • 異常是運行時的問題,用對象表示,用拋出(throw)來傳播。
  • Java 使用調用棧尋找可以處理異常的代碼塊。
  • try-catch 是處理異常的標準方式。
  • 異常使得錯誤處理邏輯與業務邏輯解耦,提升了代碼清晰度。

🎯 建議實踐

? 編寫以下代碼練習理解異常處理:

public class TestException {public static void main(String[] args) {try {int[] arr = {1, 2, 3};System.out.println(arr[3]); // 越界} catch (ArrayIndexOutOfBoundsException e) {System.out.println("數組越界了!");e.printStackTrace(); // 查看異常軌跡}System.out.println("程序繼續執行...");}
}

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

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

相關文章

3D Tiles 工具

概述 3D Tiles 工具是一組用于轉換、優化、處理和分析 3D Tiles 數據的工具和實用程序。 安裝 要在本地目錄中安裝 3D Tiles 工具,請運行以下命令: npm install 3d-tiles-tools如果想直接使用 Git 倉庫的克隆版本,請參閱開發者設置。 命…

【編號520】全國4500多個地震災害點位數據(2021.2-2025.8)

今天小編整理分享的是 全國4500多個地震災害點位數據(2021.2-2025.8)。概況數據概況全國4500多個地震災害點位數據(2021.2-2025.8)地質災害點位數據-地震!數據含發生時間、地點、經緯坐標、災害規模等。數據為shp格式和excel表格…

DriftingBlues: 4靶場滲透

DriftingBlues: 4 來自 <https://www.vulnhub.com/entry/driftingblues-4,661/> 1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.128&#xff0c;靶場IP192.168.23…

GEO 優化專家孟慶濤以 AI 技術建體系,賦能多行業智能化轉型

在生成式 AI 重塑全球搜索生態的浪潮中&#xff0c;中國 GEO&#xff08;生成式引擎優化&#xff09;領域的開拓者孟慶濤以 "智能決策革命" 的技術框架&#xff0c;顛覆了傳統 "發發文章" 的簡單認知。作為遼寧粵穗網絡科技有限公司總經理兼 GEO 實驗室主任…

架構很簡單:從架構的角度學習源碼

緣起最近出差比較多&#xff0c;在路上思考&#xff1a;如何學習源碼&#xff1f;是的&#xff0c;面試官問你看了哪些源碼&#xff1f;講一講&#xff1f;更高級的&#xff1a;說一下&#xfeff;Netty黏包拆包怎么實現的&#xff1f;或者再問的偏一點&#xff1f;講一下某個功…

R的安裝與使用

工作與學習需要&#xff0c;對R需要有一定的熟悉&#xff0c;特此記錄 目錄R的安裝與使用R的安裝R的安裝與使用 R的安裝 1.找到R的官網&#xff0c;百度直接搜索&#xff0c;或者www.bing.com國際版搜索即可&#xff0c;下載R與Rstudio&#xff0c;Rstudio是R的開發集成工具 …

界面規范10-樹

字體字號和其他地方一致&#xff1a;.el-tree-node__label{font-size: $defaultTxtSize;font-family: $defaultFontFamily;}選中效果&#xff1a;.el-tree-node.is-current>.el-tree-node__content {background-color: #ffffff !important;color: #0000ff !important;font-w…

Win 11 ARM 版搭建ESP-IDF環境問題記錄

整理我在ARM版 WIN 11 上配置ESP-IDF 環境的記錄 WIN 11環境下搭建ESP-IDF 命令環境&#xff0c;有幾種辦法&#xff1a; 下載ESP-IDF 安裝程序 從https://dl.espressif.com/dl/esp-idf/ 下載安裝程序&#xff0c;下載的程序只能在AMD64位CPU上&#xff0c;不能在ARM 芯片上使用…

FreeBSD系統使用freebsd-update命令從14.2升級到14.3

FreeBSD系統使用freebsd-update命令從14.2升級到14.3 升級操作 先升級小版本命令 # 檢查系統漏洞補丁 sudo freebsd-update fetch sudo freebsd-update install再升級到14.3 sudo freebsd-update upgrade -r 14.3-RELEASE 速度很慢啊 執行install # freebsd-update inst…

一鍵拖動去除文件夾及文件名稱的空格

經常會碰見文件夾&#xff0c;以及其中文件命名有空格的情況&#xff1a;這些空格對有些代碼程序不友好&#xff0c;做了一個一鍵拖動去除文件名稱空格 只用把文件夾或者多個文件拖動到bat代碼上就可以一鍵搞定 分為兩個文件&#xff0c;需要放在一個目錄下&#xff1a; replac…

Roo Code:用自然語言編程的VS Code擴展

在編程的世界里&#xff0c;常常需要記憶各種復雜的命令和語法&#xff0c;與機器進行“對話”。但 如果使用Roo Code&#xff0c;就可以讓編程交流變得像日常對話一樣簡單自然。用自然語言“打字”交流 Roo Code的核心設計理念是理解自然語言。這意味著&#xff0c;無需掌握任…

window顯示驅動開發—視頻呈現網絡簡介

視頻呈現網絡 (VidPN) 管理器是 DirectX 圖形內核子系統 (Dxgkrnl.sys) 的組件&#xff0c;負責管理連接到顯示適配器的監視器和其他顯示設備的集合。 VidPN 經理的職責包括&#xff1a;響應熱插拔和拔下監視器。當連接的監視器集更改時&#xff0c;維護和更新一組可用的顯示模…

安卓13_ROM修改定制化-----打開攝像頭調用相機功能 實現無人直播

無人直播功能的實現而修改手機固件,讓打開攝像頭時默認啟動相機功能,需要理解安卓系統中攝像頭調用的流程 ,而相機應用是通過綁定該服務實現功能的。 通過博文了解?????? 1??????-----了解修改無人直播功能實現的核心原理 2??????-----修改rom 實現更改…

系統架構設計師——【2024年上半年案例題】真題模擬與解析(二)

系統架構設計師——【2024年上半年案例題】真題模擬與解析&#xff08;二&#xff09;試題三&#xff1a;微服務架構與緩存策略 題目背景&#xff1a; 某電商公司計劃將其單體架構的系統重構為微服務架構&#xff0c;以應對日益增長的業務復雜性和用戶并發請求。新系統劃分為用…

加固筆記本是什么意思?加固筆記本圖片

在現代信息化社會中&#xff0c;筆記本電腦已經成為人們學習、辦公和娛樂的必備工具。然而&#xff0c;我們常見的筆記本大多用于相對穩定、舒適的環境中&#xff0c;強調的是輕薄、便攜和性能。但在一些極端復雜的行業和場景中&#xff0c;普通筆記本往往難以勝任。比如沙漠勘…

CSS高級技巧---精靈圖、字體圖標、布局技巧

1、精靈圖1&#xff09;原理核心原理&#xff1a;將網頁中的一些小背景圖像整合到一張大圖中&#xff0c;這樣服務器只需要一次請求就可以了。精靈技術的目的&#xff1a;為了有效減少服務器接收和發送請求的次數&#xff0c;提高頁面的加載速度。2&#xff09;使用使用精靈圖核…

【CMake】環境變量

目錄 一.環境變量簡單介紹 1.1.示例1——設置與清除 1.2.示例2——全局唯一性和全局可見性 1.3.示例3 1.4.示例4 1.5.示例5 一.環境變量簡單介紹 什么是環境變量&#xff1f; 我們看看官網是怎么說環境變量的&#xff1a;cmake-language(7) — CMake 4.1.1 Documentation…

Mysql雜志(十四)——Mysql邏輯架構

Mysql邏輯架構 這個圖相信大家并不陌生&#xff0c;這個就是mysql的邏輯結構圖下面是主包讓AI生成的翻譯后的邏輯結構圖&#xff1a; 我們先來看看各個部分的作用是什么 第一層&#xff1a;客戶端連接層 (Client Layer) 這一層負責處理所有客戶端連接到服務器的請求。責任就…

Git 版本回退與撤銷修改

作為版本控制管理器&#xff0c;Git應當具備版本回退等一系列功能——它的應用場景也很常見&#xff0c;當你在工作區開發時&#xff0c;忽然發現&#xff1a;怎么我這版本寫的代碼還不如上一版本好&#xff1f;這時&#xff0c;版本回退功能就派上用場了。一.版本回退1.概覽首…

學習日記-JS+DOM-day54-9.12

1.javascript基本說明知識點核心內容重點JavaScript基礎控制HTML內容與屬性&#xff0c;實現動態行為&#xff08;如開燈/關燈效果&#xff09;src屬性路徑修正&#xff08;./與../的區別&#xff09;前端三要素HTML&#xff08;內容&#xff09;、CSS&#xff08;樣式&#xf…