java基礎(chǔ)檢查和未檢查異常處理詳解
程序在運(yùn)行時(shí)如果出錯(cuò),編譯器會(huì)拋出異常,異常如果沒(méi)有被捕捉處理,程序會(huì)終止運(yùn)行。異常分為未檢查異常和已檢查異常,以下對(duì)這兩類(lèi)異常做進(jìn)一步說(shuō)明。
檢查異常
已檢查異常(checked exceptions),編譯器強(qiáng)制要求捕獲并處理可能發(fā)生的異常,不處理就不能通過(guò)編譯,如:IOException、SQLException以及用戶(hù)自定義的Exception異常。如下圖所示,程序運(yùn)行時(shí)會(huì)因?yàn)镮O等錯(cuò)誤導(dǎo)致異常,要求處理異常,需要手動(dòng)處理關(guān)閉釋放資源。

繼續(xù)拋出,通過(guò)throws exception拋出,代碼如下:
public static void readFile() throws FileNotFoundException {
String filename = "D:\\demo1.txt";
File file = new File(filename);
BufferedReader reader = null;
StringBuffer sbf = new StringBuffer();
reader = new BufferedReader(new FileReader(file));
}
在方法使用 throws FileNotFoundException ,將異常向上拋。
使用try catch或try catch finally對(duì)異常進(jìn)行捕獲然后進(jìn)行處理,代碼如下:
public static void main(String[] args) {
String filename ="D:\\demo.txt";
File file =new File(filename);
BufferedReader reader=null;
StringBuffer sbf = new StringBuffer();
try {
reader = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
}
}
未檢查異常
未檢查異常(unchecked exceptions),這類(lèi)異常也叫RuntimeException(運(yùn)行時(shí)異常),編譯器不要求強(qiáng)制處置的異常,如:NullPointerException,IndexOutOfBoundsException,VirtualMachineError等異常。如:以下代碼向上拋出異常,但調(diào)用時(shí)編譯器并不強(qiáng)制要求處理異常
public static void convert(String str) throws NumberFormatException{
Long num = Long.parseLong(str);
System.out.println(num);
}
調(diào)用方代碼如下:
public static void main(String[] args) {
convert("ww123");
}
編譯器并未出現(xiàn)強(qiáng)制要求使用處理異常,因?yàn)镹umberFormatException異常是RuntimeException(運(yùn)行時(shí)異常)。未檢查異常通常處理方法為捕獲、繼續(xù)拋出和不處理,這類(lèi)異常通常輸出至控制臺(tái),編程人員手動(dòng)的去查找問(wèn)題。
總結(jié)
檢查異常是編譯器強(qiáng)制要求捕獲并處理可能發(fā)生的異常,包括IOException、SQLException以及用戶(hù)自定義的Exception等;未檢查異常是編譯器不強(qiáng)制要求捕獲并處理可能發(fā)生的異常,包括RuntimeException類(lèi)異常。JDK常見(jiàn)異常類(lèi)圖如下:

以上就是java基礎(chǔ)檢查和未檢查異常處理詳解的詳細(xì)內(nèi)容,更多關(guān)于java檢查和未檢查異常處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java多線(xiàn)程之定時(shí)器Timer的實(shí)現(xiàn)
定時(shí)/計(jì)劃功能在Java應(yīng)用的各個(gè)領(lǐng)域都使用得非常多,比方說(shuō)Web層面。本文主要為大家介紹了Java多線(xiàn)程中定時(shí)器Timer的實(shí)現(xiàn),感興趣的小伙伴可以了解一下2022-10-10
SpringBoot 在項(xiàng)目啟動(dòng)之后執(zhí)行自定義方法的兩種方式小結(jié)
這篇文章主要介紹了SpringBoot 在項(xiàng)目啟動(dòng)之后執(zhí)行自定義方法的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java基于socket服務(wù)實(shí)現(xiàn)UDP協(xié)議的方法
這篇文章主要介紹了Java基于socket服務(wù)實(shí)現(xiàn)UDP協(xié)議的方法,通過(guò)兩個(gè)簡(jiǎn)單實(shí)例分析了java通過(guò)socket實(shí)現(xiàn)UDP發(fā)送與接收的技巧,需要的朋友可以參考下2015-05-05

