【Java】異常處理

1.異常的概念

在程序運行時,打斷正常程序流程的不正常情況分兩類:
1.錯誤(Error):應用程序無法捕獲的嚴重問題(自己無法處理)
例:
虛擬機相關的問題,如虛擬機崩潰、動態鏈接失敗、低層資源錯誤等
總是不受編譯器檢查的(Unchecked)
可以被拋出,但無法恢復,不可能被捕獲
2.異常(Exception):應用程序可捕獲的一般問題(自己可以處理)
例:
試圖打開的文件不存在
網絡連接中斷
數組越界
要加載的類找不到
……
在這里插入圖片描述

異常的分類:

  • Runtime異常(免檢異常)–經常出現的異常但沒必要花大量精力去處理(不可捕獲):由Runtime異常類(繼承Exception類)及其子類表示的異常,如數組越界、算術運算異常、空指針異常等。
  • 必檢異常–不經常出現但影響力很大(可捕獲):除Runtime異常類及其子類之外的所有異常,如文件不存在、無效URL等。
public class TestEx {public static void main(String[] args) {int [] array = {1,2,3};//System.out.println(array[3]);//拋出異常//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3//at java005.TestEx.main(TestEx.java:6)//可以去幫助文檔查ArrayIndexOutOfBoundsException//System.out.println(10/0);//拋出異常//Exception in thread "main" java.lang.ArithmeticException: / by zero//at java005.TestEx.main(TestEx.java:11)}
}
2.Java的異常類層次

Java.lang.Throwable是所有異常類的父類
1.檢索異常的相關信息
2.輸出顯示異常發生位置的堆棧追蹤軌跡
在這里插入圖片描述
ArithmetcException:整數的除0操作導致的異常,如:int i=10/0;
NullPointerException:對象未實例化時,即試圖通過該對象的引用訪問其成員變量或方法,如Date d=null; System.out.println(d.toString());
IOException:輸入/輸出時可能產生的各種異常
(所有繼承Exception類的子類都以Exception結尾)

3.異常處理方法
  • 捕獲并處理異常
  • 將方法中產生的異常拋出
3.1捕獲并處理異常

通過try-catch-finally語句來實現,基本格式:
try{ /** 監控區域 /
//一條或多條可能拋出異常的Java語句
}catch(ExceptionType1 e1){ /
* 異常處理程序 /
//捕獲到ExceptionType1類型的異常時執行的代碼
}catch (ExceptionType2 e2){ /
* 異常處理程序 */
//捕獲到ExceptionType2類型的異常時執行的代碼
} …
finally{
//執行最終清理的語句
}
try-catch-finally可以實現嵌套

舉例:

		try {			System.out.println(10/0);System.out.println("1");System.out.println(array[3]);}catch(ArrayIndexOutOfBoundsException aioobe){System.out.println("2");}catch(ArithmeticException ae) {System.out.println("3");}finally {System.out.println("4");}System.out.println("5");

在這里插入圖片描述

		try {System.out.println(array[3]);			System.out.println(10/0);System.out.println("1");}catch(ArrayIndexOutOfBoundsException aioobe){System.out.println("2");}catch(ArithmeticException ae) {System.out.println("3");}finally {System.out.println("4");}System.out.println("5");

在這里插入圖片描述

		try {System.out.println(array[3]);			System.out.println(10/0);System.out.println("1");}catch(ArithmeticException ae) {System.out.println("3");}finally {System.out.println("4");}System.out.println("5");

在這里插入圖片描述
在這里插入圖片描述

注意:在try語句塊內,只要遇到第一個異常就會執行catch語句,剩下的不再執行,finally 語句塊可以省略,若finally語句塊存在,則無論是否發生異常均執行

package java005;public class TestEx {public static void main(String[] args) {TestEx t = new TestEx();
//28行		t.m(0);}public void m(int n) throws ArithmeticException{if(n==0) {
//32行			ArithmeticException e = new ArithmeticException("除數不能為0");throw e;//可理解為傳入到了catch(ArithmeticException ae){ae.printStackTrace();//返回堆棧路徑ae.getMassage();}}}
}

在這里插入圖片描述

3.2多種異常同時處理
FileInputStream in = null;try {in = new FileInputStream("a.txt");int b = in.read();while(b != 1) {b = in.read();System.out.println(b);}}catch (FileNotFoundException fe) {fe.printStackTrace();}catch (IOException ioe) {//IOException是FileNotFoundException的父類,catch按照從上往下的順序運行,故子類應排在父類之前ioe.printStackTrace();}finally {try {in.close();}catch(IOException e) {e.printStackTrace();}}

封裝一下

public void readMethod(String fileName) {FileInputStream in = null;try {in = new FileInputStream(fileName);int b = in.read();while(b != 1) {b = in.read();System.out.println(b);}}catch (FileNotFoundException fe) {fe.printStackTrace();}catch (IOException ioe) {//IOException是FileNotFoundException的父類,catch按照從上往下的順序運行,故子類應排在父類之前ioe.printStackTrace();}finally {try {in.close();}catch(IOException e) {e.printStackTrace();}}}

如果不想在readMethod方法里面實現處理異常,將該異常拋出到調用該方法的程序

	public void readMethod(String fileName)throws FileNotFoundException,IOException {FileInputStream in = null;in = new FileInputStream(fileName);int b = in.read();while(b != 1) {b = in.read();System.out.println(b);}}public void callRead() {try {readMethod("a.txt");}catch (FileNotFoundException fe) {fe.printStackTrace();}catch (IOException ioe) {//IOException是FileNotFoundException的父類,catch按照從上往下的順序運行,故子類應排在父類之前ioe.printStackTrace();}}

若一個異常在轉向到main()后還未被處理,則程序將非正常終止。
在這里插入圖片描述

4.自定義異常類

在這里插入圖片描述

public class ServerTimeOutException extends Exception{private String reason;private int port ;public ServerTimeOutException(String reason, int port){this.reason = reason;this.port = port;}public String getReason(){return reason;}public int getPort(){return port;}
}
Public void connectMe(String serverName) throws ServerTimeOutException{int success;int portToConnect = 80;success = open(serverName, portToConnect);if(success= -1){throw new ServerTimedOutException(“Couldnot connect”,80);}
}
 Public void findServer(){…try{connectMe(defaultServer);} catch (ServerTimeOutException e){System.out.println(“Server timed out, try another”);}
}
4.1方法重寫拋出異常

注意:重寫方法需要拋出與原方法所拋出異常類型一致的異常或者不拋出異常
在這里插入圖片描述

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

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

相關文章

Linux(Centos 7.6)命令詳解:tar

1.命令作用 命令tar將許多文件一起保存到單個磁帶或磁盤存檔中,并且可以從存檔中恢復單個文件(GNU tar saves many files together into a single tape or disk archive, and can restore individual files from the archive.)。 2.命令語法 Usage: tar [OPTION.…

企業網絡綜合實訓

企業網絡綜合實訓 任務描述: 公司的中心機房、辦公區一和辦公區二位于同一園區。要求各大樓之間要互通,并且均能訪問Internet;同時公司業務需要對外拓展,需要在Internet數據中心機房部署一臺對外提供DNS和Web站點服務的服務器。…

8天Python從入門到精通【itheima】-41~44

目錄 41節-while循環的嵌套應用 1.學習目標 2.while循環的偽代碼和生活情境中的應用 3.圖片應用的代碼案例 4.代碼實例【Patrick自己親手寫的】: 5.whlie嵌套循環的注意點 6.小節總結 42節-while循環的嵌套案例-九九乘法表 1.補充知識-print的不換行 2.補充…

探索Linux互斥:線程安全與資源共享

個人主頁:chian-ocean 文章專欄-Linux 前言: 互斥是并發編程中避免競爭條件和保護共享資源的核心技術。通過使用鎖或信號量等機制,能夠確保多線程或多進程環境下對共享資源的安全訪問,避免數據不一致、死鎖等問題。 競爭條件 競…

《Stable Diffusion 3.0企業級落地指南》——技術賦能與商業價值的深度融合實踐

Stable Diffusion 3.0(SD3)作為當前多模態生成式AI技術的集大成者,憑借其創新的擴散Transformer架構(DiT)、流匹配(Flow Matching)技術以及超分辨率生成能力,正在重塑企業內容生產的…

基于本地模型+多級校驗設計的高效緩存,有效節省token數量(有點雞肋doge)。

前言 我是基于token有限而考慮的一個省錢方案,還能夠快速返回結果,但是劣勢也很明顯,設計不好容易出問題,就如下面所介紹的語義飄逸和緩存污染,我認為在自己學習大模型的過程用來省錢非常可以,再加上學習過…

網絡安全全知識圖譜:威脅、防護、管理與發展趨勢詳解

1 網絡安全基礎概念 1.1 什么是網絡安全 網絡安全是指通過技術、管理和法律等手段,保護計算機網絡系統中的硬件、軟件及其系統中的數據,不因偶然的或者惡意的原因而遭受到破壞、更改、泄露,確保系統連續可靠正常地運行,網絡服務不…

遠控安全進階之戰:TeamViewer/ToDesk/向日葵設備安全策略對比

【作者主頁】Francek Chen 【文章摘要】在數字化時代,卓越的遠程控制軟件需兼顧功能與體驗,包括流暢連接、高清畫質、低門檻UI設計、毫秒級延遲及多功能性,同時要有獨樹一幟的遠控安全技術,通過前瞻性安全策略阻擋網絡風險&#x…

Steam發布游戲過程的若干問題

我沒有想到在Steam發布游戲的過程會比做游戲的過程更困難,更惡心。 注冊Steamworks 稅務采訪 稅務采訪部分填的地址要和后面它們要求你發證件照片里的地址一樣。護照里因為沒有地址不會通過,我用的駕照里面有地址。沒有駕照可以用身份證。 應用準備界…

開搞:第四個微信小程序:圖上縣志

原因:我換了一個微信號來搞,因為用同一個用戶,備案只能一個個的來。這樣不行。所以我換了一個。原來注冊過小程序。現在修改即可。注意做好計劃后,速度備案和審核,不然你時間浪費不起。30元花起。 結構: -…

第三十七天打卡

知識點回顧: 過擬合的判斷:測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint,還包含訓練狀態 早停策略 作業:對信貸數據集訓練后保存權重,加載權重后繼續訓練50輪&#x…

Java高頻面試之并發編程-21

hello啊,各位觀眾姥爺們!!!本baby今天又來報道了!哈哈哈哈哈嗝🐶 面試官:詳細說說AQS AQS(AbstractQueuedSynchronizer)是 Java 并發包(java.util.concurre…

按鍵狀態機

原工程地址:https://github.com/candylife9/state_machine_example 視頻:C語言之狀態機編程_02_狀態機使用案例分析_嗶哩嗶哩_bilibili 我覺得講的挺好的。 來自豆包封裝的通用接口 頭文件 /*** file key_state_machine.h* brief 通用按鍵狀態機接口…

華為OD機試真題——新學校選址(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

歐拉操作系統下安裝hadoop集群

背景:歐拉操作系統下安裝CDH集群的時候,需要安裝python2.7.5,但是本身歐拉系統對python2的支持可能沒有那么好,所以考慮搭建原生的hadoop集群。 基礎環境如下 組件名稱組件版本歐拉VERSION“22.03 (LTS-SP4)”jdkopenjdk versio…

SQL語句的執行流程

文章目錄 一、執行流程二、建立連接三、預處理器四、解析器4.1 詞法分析4.2 語法分析4.3 語義分析 五、優化器六、執行器七、返回結果 一、執行流程 階段主要功能關鍵組件1. 建立連接身份驗證、權限檢查連接器2. 預處理器緩存檢查、SQL預處理查詢緩存3. 解析器詞法分析、語法分…

TiDB:從快速上手到核心原理與最佳實踐

文章目錄 引言第一部分:TiDB快速體驗與實踐指南1. TiDB概述2. TiDB部署方式2.1 本地測試環境部署2.2 生產環境部署2.3 Kubernetes部署2.4 云服務 3. TiDB基本操作3.1 連接TiDB3.2 數據庫和表操作3.3 分區表3.4 事務操作 4. 數據遷移到TiDB4.1 從MySQL遷移4.2 使用Ti…

總結:進程和線程的聯系和區別

前言:通過學習javaEE初階中的多線程章節后加上我自己的理解,想來總結一下線程和進程的聯系和區別. 一來是能更好地復習知識,二來是為了記錄我的學習路程,相信未來的我回首不會忘記這段難忘的經歷. 1.進程 先來談談進程:進程是操作系統中資源分配的基本單位. 1)進程的執行方…

邊緣云的定義、實現與典型應用場景!與傳統云計算的區別!

一、什么是邊緣云?? 邊緣云是一種?分布式云計算架構?,將計算、存儲和網絡資源部署在?靠近數據源或終端用戶的網絡邊緣側?(如基站、本地數據中心或終端設備附近),而非傳統的集中式云端數據中心。 ?核心特征?&…

海康威視攝像頭C#開發指南:從SDK對接到安全增強與高并發優化

一、海康威視SDK核心對接流程?? 1. ??開發環境準備?? ??官方SDK獲取??:從海康開放平臺下載最新版SDK(如HCNetSDK.dll、PlayCtrl.dll)。??依賴項安裝??:確保C運行庫(如vcredist_x86.exe)與S…