188. Java 異常 - Java 異常處理規范

文章目錄

  • 188. Java 異常 - Java 異常處理規范
    • 📜 什么是“Catch or Specify Requirement”?
    • ? 兩種滿足方式
      • 方法一:使用 `try-catch` 捕獲異常
      • 方法二:使用 `throws` 聲明異常
    • ? 不遵守規則會怎樣?
    • 💡 哪些異常必須遵守這個規則?
    • 📌 常見的 **受檢異常** 舉例:
    • 🎬 示例對比:什么是“必須處理的”和“可以忽略的”
      • ? Checked Exception(必須處理)
      • ? Unchecked Exception(不強制處理)
    • 🎯 實戰建議
    • 🧾 小結

188. Java 異常 - Java 異常處理規范


📜 什么是“Catch or Specify Requirement”?

Java 是一種強類型語言,對異常的處理有嚴格要求。

Java 編譯器要求:

👉 凡是可能拋出受檢異常(Checked Exception)的代碼,要么捕獲它(catch),要么聲明它會拋出(specify throws)。

這就叫做:

🧠 Catch or Specify Requirement(捕獲或聲明要求)


? 兩種滿足方式

方法一:使用 try-catch 捕獲異常

try {FileReader reader = new FileReader("data.txt");
} catch (FileNotFoundException e) {System.out.println("文件未找到!");
}

? 如果你知道如何處理異常,就用 try-catch 包住它。


方法二:使用 throws 聲明異常

public void readFile() throws FileNotFoundException {FileReader reader = new FileReader("data.txt");
}

? 如果你暫時不處理異常,可以聲明它拋出,由調用者負責處理。


? 不遵守規則會怎樣?

如果你既不捕獲,也不聲明,編譯器會立刻報錯!

例如:

// ? 編譯失敗!
FileReader reader = new FileReader("data.txt");

會報錯:

Unhandled exception: java.io.FileNotFoundException

💡 哪些異常必須遵守這個規則?

Java 將異常分為三類,只有其中一種是 必須遵守 這個 Catch or Specify 規則的:

異常類型是否必須捕獲/聲明說明
? 受檢異常(Checked Exceptions由外部環境引發,比如 IO、數據庫等
? 非受檢異常(Unchecked Exceptions程序邏輯問題,比如除零、空指針
? 錯誤(Errors嚴重錯誤,不建議處理,比如內存溢出

📌 常見的 受檢異常 舉例:

異常說明
IOException文件、網絡等 I/O 錯誤
SQLException數據庫錯誤
FileNotFoundException文件找不到
ClassNotFoundException類未找到

🎬 示例對比:什么是“必須處理的”和“可以忽略的”

? Checked Exception(必須處理)

public void openFile() throws FileNotFoundException {FileReader reader = new FileReader("abc.txt");
}

?? 編譯時必須捕獲或聲明。


? Unchecked Exception(不強制處理)

public void divide() {int x = 10 / 0; // ArithmeticException
}

?? 編譯器不會強制處理。


🎯 實戰建議

  • ? 若異常可預測、可恢復(如文件找不到)→ 捕獲處理
  • ? 若你希望調用者決定怎么處理 → 使用 throws 拋出
  • ?? 別濫用 throws Exception,要具體!
  • ? 不建議捕獲 Error,那是 JVM 層級嚴重問題(比如內存溢出)

🧾 小結

要點說明
📌 Catch or Specify Requirement受檢異常必須 try-catch 或 throws 聲明
🎯 只適用于 Checked Exception不適用于運行時異常和錯誤
🛠? 違背規則會 編譯失敗保證異常處理不被忽視
🤹 合理選擇處理方式業務邏輯中推薦處理可控異常

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

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

相關文章

泛型通配符 T、E、K、V、?

在Java后端開發中&#xff0c;你一定在寫集合類或工具類時&#xff0c;見過 T、E、K、V、? 這樣的泛型通配符。但你是否有過以下疑惑&#xff1a; T、E、K、V 到底有什么區別&#xff1f;為什么大家都用這些字母&#xff1f;List<?> 和 List 有什么不同&#xff1f;什么…

基于腳手架微服務的視頻點播系統-數據管理與網絡通信部分的預備工作

基于腳手架微服務的視頻點播系統-數據管理與網絡通信部分的預備工作一.數據管理二.網絡通信2.1客戶端通信模塊及測試用例的實現2.2MockServer搭建的相關接口介紹2.3MockServer的搭建示例一.數據管理 在前?的實現中&#xff0c;程序中的數據、以及界?操作等全部攪合在?起&am…

html表單登錄模式代碼

使用的是Content-Typeapplication/x-www-form-urlencoded形式如代碼如下的html&#xff0c;后端沒寫下去&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>管理員登錄</title><…

NLP:Transformer之self-attention(特別分享3)

本文目錄&#xff1a;一、核心思想&#xff1a;一句話概括二、計算流程的直觀比喻三、分步計算詳解&#xff08;附數字例子&#xff09;第 1 步&#xff1a;創建 Query, Key, Value 向量第 2 步&#xff1a;計算注意力分數第 3 步&#xff1a;縮放并應用 Softmax第 4 步&#x…

25、優化算法與正則化技術:深度學習的調優藝術

學習目標:深入理解各種優化算法的原理和適用場景,掌握學習率調度的方法和策略,學會使用Dropout、批歸一化等正則化技術,理解早停和驗證策略,建立深度學習調優的系統性知識。 深度學習的成功不僅依賴于精巧的模型架構,更在于巧妙的訓練策略。如果說網絡架構是房屋的設計圖…

Netty-01-NIO前置知識

目錄 NIO三大組件 一. ByteBuffer 基本用法 DirectByteBuffer與HeapByteBuffer對比 字符串轉ByteBuffer ByteBuffer.wrap(byte[] ) 粘包與拆包 文件編程 零拷貝transferTo 二. 阻塞與非阻塞Channel 三. Selector SelectionKey&#xff08;重點&#xff09; Select…

知識點17:多Agent系統架構設計模式

知識點17&#xff1a;多Agent系統架構設計模式 核心概念 掌握系統架構思維&#xff0c;理解多Agent系統的設計原則和模式 架構設計核心概念 在構建多Agent系統時&#xff0c;良好的架構設計是系統成功的關鍵。本節將介紹多Agent系統架構設計中的核心概念&#xff0c;包括單點瓶…

數據庫造神計劃第五天---增刪改查(CRUD)(1)

&#x1f525;個人主頁&#xff1a;尋星探路 &#x1f3ac;作者簡介&#xff1a;Java研發方向學習者 &#x1f4d6;個人專欄&#xff1a;《從青銅到王者&#xff0c;就差這講數據結構&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此簡單&a…

基于Vue3的人工智能生成內容標識服務平臺前端頁面設計

效果圖&#xff1a;素材庫&#xff1a;App.vue<template><div id"app"><!-- 頭部導航 --><Header /><!-- 主要內容區域 --><main class"main-content"><div class"container"><!-- 強制性國家標準…

使用 MyCat 實現 MySQL 主從讀寫分離

文章目錄使用 MyCat 實現 MySQL 主從讀寫分離完整指南一、MySQL 讀寫分離基礎概述1.1 讀寫分離工作原理1.2 為什么需要讀寫分離1.3 讀寫分離的兩種實現方式主流讀寫分離中間件對比二、MyCat 中間件簡介2.1 MyCat 核心功能2.2 MyCat 適用場景三、環境準備與 MyCat 安裝3.1 前提&…

物聯網傳感器檢測實驗

/*------------------------------------------------------------------------------ * @文件名 : handle * @描述 : 用戶處理函數 * @作者 : 物聯網項目組 * @日期 : 2023/04/01 * @版本 : V0.0.2 *****************************…

什么是dirsearch、xray、durpsuite、sqlmap?

你提到的 dirsearch、xray、durpsuite&#xff08;可能為筆誤&#xff0c;推測是 ??Burp Suite??&#xff09;和 sqlmap 均為網絡安全領域中常用的工具&#xff0c;主要用于 Web 應用的安全測試、漏洞檢測或滲透測試。以下分別詳細說明&#xff1a;??1. dirsearch????…

lamp腳本部署

#!/bin/bash #關閉防火墻和selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 #配置yum網絡源 echo “正在配置yum倉庫” rm -rf /etc/yum.repos.d/* wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &am…

Redis Hash數據類型深度解析:從命令、原理到實戰場景

前言 在Redis的眾多數據結構中&#xff0c;Hash&#xff08;哈希&#xff09;類型占據著至關重要的地位。Redis本身就是一個高性能的鍵值&#xff08;Key-Value&#xff09;數據庫&#xff0c;其底層的鍵值對便是通過哈希方式組織的。而Hash數據類型則更進一步&#xff0c;它允…

【C++實戰?】解鎖C++文件操作:從基礎到實戰的進階之路

目錄一、文件操作的基本概念1.1 文件的分類與打開方式1.2 文件流的概念與相關類&#xff08;ifstream、ofstream、fstream&#xff09;1.3 文件操作的基本流程二、文本文件的讀寫實戰2.1 文本文件的打開與關閉2.2 文本文件的寫入操作&#xff08;<< 運算符、write 函數&a…

從C++開始的編程生活(9)——模板初階

前言 本系列文章承接C語言的學習&#xff0c;需要有C語言的基礎才能學會哦~ 第8篇主要講的是有關于C的模板初階。 C才起步&#xff0c;都很簡單&#xff01;&#xff01; 目錄 前言 模板初階 基本語法 函數模板的實例化 顯式實例化的作用 類模板 基本語法 模板初階 模板…

計算機網絡——傳輸層(25王道最新版)

傳輸層傳輸層提供的服務進程 端口號 傳輸層協議之間的關系socket套接字有鏈接 VS 無連接 | 可靠 VS 不可靠UDP數據報及檢驗數據報格式檢驗方法TCPTCP協議的三大階段TCP報文段格式&#xff08;很重要&#xff09;建立連接&#xff08;三次握手&#xff09;&#xff08;超級超級重…

羽毛球地板:從專業運動場景到全民健身市場的技術躍遷與產業重構

在全球體育產業向“專業化大眾化”雙軌并行的趨勢下&#xff0c;羽毛球地板作為運動場景的核心基礎設施&#xff0c;正經歷從單一功能型產品向“性能優化場景適配智能管理”一體化解決方案的轉型。據QYResearch統計&#xff0c;2031年全球羽毛球地板市場規模將達15.95億元&…

R 語言查看類庫源碼的方法

你想查看 getGEO&#xff08;來自 R 語言 GEOquery 包&#xff09;的源碼&#xff0c;這能幫你更好理解其工作原理和數據處理細節。由于 getGEO 是 R 函數&#xff0c;查看方法與 Python 有所不同。下面為你提供幾種主要方法。 方法 適用場景 關鍵命令/操作 在 R 控制臺直接查看…

SQL,posexplode 用法示例

示例1 -- 創建測試數據 WITH test_data AS (SELECT array(apple, banana, cherry) as fruits ) SELECT pos, col FROM test_data LATERAL VIEW posexplode(fruits) t AS pos, col;結果 pos | col ----|------- 0 | apple 1 | banana 2 | cherry示例2 -- 假設有一個用戶表…