幾種常見(jiàn)的Java運(yùn)行時(shí)異常小結(jié)
前言
在Java編程中,異常處理是一個(gè)至關(guān)重要的部分。它允許我們?cè)诔绦蜻\(yùn)行時(shí)檢測(cè)和處理錯(cuò)誤條件,以確保程序的穩(wěn)定性和可靠性。在Java中,異常被分為兩大類:檢查異常(checked exceptions)和運(yùn)行時(shí)異常(runtime exceptions)。運(yùn)行時(shí)異常是那些不需要在代碼中顯式捕獲的異常,它們通常在運(yùn)行時(shí)由JVM自動(dòng)拋出。
以下是幾種常見(jiàn)的Java運(yùn)行時(shí)異常:
1、ArithmeticException(算術(shù)異常)
ArithmeticException是當(dāng)算術(shù)運(yùn)算發(fā)生錯(cuò)誤時(shí)拋出的異常,比如除以零。
int a = 10; int b = 0; int c = a / b; // 這會(huì)拋出ArithmeticException,因?yàn)槌龜?shù)不能為零
2、ClassCastException (類轉(zhuǎn)換異常)
ClassCastException是當(dāng)試圖將對(duì)象強(qiáng)制轉(zhuǎn)換為不兼容的類時(shí)拋出的異常。
Object obj = "Hello"; Integer i = (Integer) obj; // 這會(huì)拋出ClassCastException,因?yàn)閛bj不是Integer類型
3、IllegalArgumentException (非法參數(shù)異常)
IllegalArgumentException是當(dāng)向方法傳遞不合法或不適當(dāng)?shù)膮?shù)時(shí)拋出的異常。雖然這不是一個(gè)標(biāo)準(zhǔn)的運(yùn)行時(shí)異常(它實(shí)際上是一個(gè)檢查異常的超類RuntimeException的子類),但它通常在運(yùn)行時(shí)被拋出,因此也經(jīng)常被歸類為運(yùn)行時(shí)異常。
public void printNumber(int number) {
if (number < 0) {
throw new IllegalArgumentException("Number cannot be negative");
}
System.out.println(number);
}
4、IndexOutOfBoundsException (下標(biāo)越界異常)
IndexOutOfBoundsException是當(dāng)訪問(wèn)數(shù)組、字符串或集合的非法索引時(shí)拋出的異常。
int[] array = new int[5]; int element = array[10]; // 這會(huì)拋出IndexOutOfBoundsException,因?yàn)樗饕?0超出了數(shù)組范圍
5、NullPointerException (空指針異常)
NullPointerException是當(dāng)應(yīng)用程序試圖在需要對(duì)象的地方使用null時(shí)拋出的異常。這是Java中最常見(jiàn)的運(yùn)行時(shí)異常之一。
String str = null; int length = str.length(); // 這會(huì)拋出NullPointerException,因?yàn)閟tr是null
6、SecurityException (安全異常)
SecurityException是當(dāng)安全管理器不允許執(zhí)行請(qǐng)求的安全敏感操作時(shí)拋出的異常。這通常發(fā)生在訪問(wèn)系統(tǒng)資源或執(zhí)行受限制的操作時(shí)。
// 假設(shè)有一個(gè)安全管理器設(shè)置了特定的安全策略 // 試圖執(zhí)行受限制的操作可能會(huì)拋出SecurityException
附:在Java中捕獲和處理異常通常使用try-catch塊
當(dāng)你預(yù)計(jì)某段代碼可能會(huì)拋出異常時(shí),你可以將這段代碼放在try塊中,并在catch塊中處理這個(gè)異常。以下是一個(gè)簡(jiǎn)單的示例,展示了如何捕獲和處理異常:
public class ExceptionHandlingExample {
public static void main(String[] args) {
try {
// 可能會(huì)拋出異常的代碼
int result = 10 / 0; // 這會(huì)拋出ArithmeticException
} catch (ArithmeticException e) {
// 處理ArithmeticException異常的代碼
System.out.println("捕獲到算術(shù)異常: " + e.getMessage());
} catch (Exception e) {
// 處理其他類型異常的代碼(可選)
// 注意:通常不建議捕獲所有異常(Exception),除非你確實(shí)打算處理所有類型的異常
System.out.println("捕獲到異常: " + e.getMessage());
e.printStackTrace(); // 打印異常的堆棧跟蹤信息
} finally {
// 無(wú)論是否發(fā)生異常都會(huì)執(zhí)行的代碼(可選)
System.out.println("finally塊中的代碼,無(wú)論是否發(fā)生異常都會(huì)執(zhí)行");
}
}
}
在這個(gè)示例中,我們嘗試執(zhí)行一個(gè)會(huì)導(dǎo)致ArithmeticException的除法操作(除以0)。這個(gè)操作被放在try塊中,因此如果發(fā)生異常,控制流將轉(zhuǎn)移到相應(yīng)的catch塊。在這個(gè)例子中,我們有一個(gè)專門捕獲ArithmeticException的catch塊,它會(huì)打印出一條錯(cuò)誤消息。如果try塊中的代碼拋出了其他類型的異常(在這個(gè)示例中沒(méi)有),并且沒(méi)有相應(yīng)的catch塊來(lái)捕獲它,那么異常將會(huì)繼續(xù)向上傳播,直到找到一個(gè)能夠處理它的catch塊,或者如果沒(méi)有找到,那么程序?qū)?huì)終止并打印出異常的堆棧跟蹤信息。
finally塊是可選的,它包含的代碼無(wú)論是否發(fā)生異常都會(huì)執(zhí)行。這通常用于執(zhí)行清理操作,如關(guān)閉文件或網(wǎng)絡(luò)連接。注意,如果在try或catch塊中使用了return、break或continue語(yǔ)句,那么finally塊仍然會(huì)執(zhí)行,但finally塊之后的代碼(如果有的話)可能不會(huì)執(zhí)行。
總結(jié)
到此這篇關(guān)于幾種常見(jiàn)的Java運(yùn)行時(shí)異常的文章就介紹到這了,更多相關(guān)Java運(yùn)行異常小結(jié)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring boot加載資源路徑配置和classpath問(wèn)題解決
這篇文章主要介紹了spring boot加載資源路徑配置和classpath問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理(總結(jié))
這篇文章主要介紹了Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
關(guān)于@Autowired注解和靜態(tài)方法及new的關(guān)系
這篇文章主要介紹了關(guān)于@Autowired注解和靜態(tài)方法及new的關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
SpringBoot自動(dòng)配置特點(diǎn)與原理詳細(xì)分析
這篇文章主要介紹了SpringBoot自動(dòng)配置原理分析,SpringBoot是我們經(jīng)常使用的框架,那么你能不能針對(duì)SpringBoot實(shí)現(xiàn)自動(dòng)配置做一個(gè)詳細(xì)的介紹。如果可以的話,能不能畫(huà)一下實(shí)現(xiàn)自動(dòng)配置的流程圖。牽扯到哪些關(guān)鍵類,以及哪些關(guān)鍵點(diǎn)2022-08-08
詳解Java如何實(shí)現(xiàn)在PDF中插入,替換或刪除圖像
圖文并茂的內(nèi)容往往讓人看起來(lái)更加舒服,如果只是文字內(nèi)容的累加,往往會(huì)使讀者產(chǎn)生視覺(jué)疲勞。搭配精美的文章配圖則會(huì)使文章內(nèi)容更加豐富。那我們要如何在PDF中插入、替換或刪除圖像呢?別擔(dān)心,今天為大家介紹一種高效便捷的方法2023-01-01
springboot3整合SpringSecurity實(shí)現(xiàn)登錄校驗(yàn)與權(quán)限認(rèn)證
本文主要介紹了springboot3整合SpringSecurity實(shí)現(xiàn)登錄校驗(yàn)與權(quán)限認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
java實(shí)現(xiàn)計(jì)算器加法小程序(圖形化界面)
這篇文章主要介紹了Java實(shí)現(xiàn)圖形化界面的計(jì)算器加法小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
SpringCloud?Feign使用ApacheHttpClient代替默認(rèn)client方式
這篇文章主要介紹了SpringCloud?Feign使用ApacheHttpClient代替默認(rèn)client方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

