更新時(shí)間:2022-08-08 12:39:48 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2052次
Java中的異常處理是處理運(yùn)行時(shí)錯(cuò)誤的有效手段之一,可以保持應(yīng)用程序的正常流程。Java 異常處理是一種處理運(yùn)行時(shí)錯(cuò)誤的機(jī)制,例如 ClassNotFoundException、IOException、SQLException、RemoteException 等。
異常是在程序執(zhí)行期間(即在運(yùn)行時(shí))發(fā)生的不希望或意外事件,它會(huì)破壞程序指令的正常流程。程序可以捕獲和處理異常。當(dāng)方法中發(fā)生異常時(shí),它會(huì)創(chuàng)建一個(gè)對(duì)象。該對(duì)象稱(chēng)為異常對(duì)象。它包含有關(guān)異常的信息,例如異常的名稱(chēng)和描述以及異常發(fā)生時(shí)程序的狀態(tài)。
用戶輸入無(wú)效
設(shè)備故障
網(wǎng)絡(luò)連接丟失
物理限制(磁盤(pán)內(nèi)存不足)
代碼錯(cuò)誤
打開(kāi)不可用的文件
錯(cuò)誤表示Java虛擬機(jī)(JVM)內(nèi)存不足、內(nèi)存泄漏、堆棧溢出錯(cuò)誤、庫(kù)不兼容、無(wú)限遞歸等不可恢復(fù)的情況。錯(cuò)誤通常超出程序員的控制范圍,我們不應(yīng)該嘗試處理錯(cuò)誤.
讓我們討論最重要的部分,即錯(cuò)誤和異常之間的區(qū)別,如下所示:
錯(cuò)誤: 錯(cuò)誤表示合理的應(yīng)用程序不應(yīng)嘗試捕獲的嚴(yán)重問(wèn)題。
異常: 異常表示合理的應(yīng)用程序可能試圖捕獲的條件。
所有異常和錯(cuò)誤類(lèi)型都是Throwable類(lèi)的子類(lèi),后者是層次結(jié)構(gòu)的基類(lèi)。一個(gè)分支由Exception領(lǐng)導(dǎo)。此類(lèi)用于用戶程序應(yīng)捕獲的異常情況。NullPointerException 是此類(lèi)異常的一個(gè)示例。Java 運(yùn)行時(shí)系統(tǒng) ( JVM ) 使用另一個(gè)分支Error來(lái)指示與運(yùn)行時(shí)環(huán)境本身 (JRE) 相關(guān)的錯(cuò)誤。StackOverflowError 就是此類(lèi)錯(cuò)誤的一個(gè)示例。

Java 定義了與其各種類(lèi)庫(kù)相關(guān)的幾種異常類(lèi)型。Java 還允許用戶定義自己的異常。

異常可以分為兩種方式:
1.內(nèi)置異常
檢查異常
未經(jīng)檢查的異常
2.用戶定義的異常
Java中異常處理的優(yōu)點(diǎn)如下:
提供完成程序執(zhí)行
輕松識(shí)別程序代碼和錯(cuò)誤處理代碼
錯(cuò)誤的傳播
有意義的錯(cuò)誤報(bào)告
識(shí)別錯(cuò)誤類(lèi)型
1.printStackTrace() - 此方法以異常名稱(chēng)的格式打印異常信息:異常描述、堆棧痕跡。
//program to print the exception information using printStackTrace() method
import java.io.*;
class GFG {
public static void main (String[] args) {
int a=5;
int b=0;
try{
System.out.println(a/b);
}
catch(ArithmeticException e){
e.printStackTrace();
}
}
}
輸出:
java.lang.ArithmeticException: / 由零
在 GFG.main(File.java:10)
2.toString() - 此方法以異常名稱(chēng):異常描述的格式打印異常信息。
//program to print the exception information using toString() method
import java.io.*;
class GFG1 {
public static void main (String[] args) {
int a=5;
int b=0;
try{
System.out.println(a/b);
}
catch(ArithmeticException e){
System.out.println(e.toString());
}
}
}
輸出:
java.lang.ArithmeticException: / 由零
3.getMessage() - 這個(gè)方法只打印異常的描述。
//program to print the exception information using getMessage() method
import java.io.*;
class GFG1 {
public static void main (String[] args) {
int a=5;
int b=0;
try{
System.out.println(a/b);
}
catch(ArithmeticException e){
System.out.println(e.getMessage());
}
}
}
輸出:
/ 由零
默認(rèn)異常處理:只要在方法內(nèi)部發(fā)生異常,該方法就會(huì)創(chuàng)建一個(gè)稱(chēng)為異常對(duì)象的對(duì)象并將其交給運(yùn)行時(shí)系統(tǒng)(JVM)。異常對(duì)象包含異常的名稱(chēng)和描述以及發(fā)生異常的程序的當(dāng)前狀態(tài)。創(chuàng)建異常對(duì)象并在運(yùn)行時(shí)系統(tǒng)中處理它稱(chēng)為拋出異常。可能有一個(gè)方法列表,這些方法已被調(diào)用以獲取發(fā)生異常的方法。這個(gè)有序的方法列表稱(chēng)為Call Stack?,F(xiàn)在將發(fā)生以下過(guò)??程。
運(yùn)行時(shí)系統(tǒng)搜索調(diào)用堆棧以找到包含可以處理發(fā)生的異常的代碼塊的方法。該代碼塊稱(chēng)為異常處理程序。
運(yùn)行時(shí)系統(tǒng)從發(fā)生異常的方法開(kāi)始搜索,并以調(diào)用方法的相反順序遍歷調(diào)用Java堆棧。
如果它找到合適的處理程序,則將發(fā)生的異常傳遞給它。適當(dāng)?shù)奶幚沓绦蛞馕吨鴴伋龅漠惓?duì)象的類(lèi)型與它可以處理的異常對(duì)象的類(lèi)型相匹配。
如果運(yùn)行時(shí)系統(tǒng)搜索調(diào)用堆棧上的所有方法并且找不到合適的處理程序,則運(yùn)行時(shí)系統(tǒng)將異常對(duì)象移交給默認(rèn)異常處理程序,它是運(yùn)行時(shí)系統(tǒng)的一部分。該處理程序以下列格式打印異常信息并異常終止程序。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)