您好,登錄后才能下訂單哦!
本文實(shí)例為大家分享了Java異常處理的具體代碼,供大家參考,具體內(nèi)容如下
一.異常的分類
1.由Java虛擬機(jī)拋出的異常(Error):程序無(wú)法處理的問題,用戶不用去進(jìn)行處理(虛擬機(jī)錯(cuò)誤丶內(nèi)存溢出錯(cuò)誤丶線程死鎖)
2.Exception異常:程序本身可以進(jìn)行處理的異常
1).非檢查異常(Unchecked Exception):編譯器不需要強(qiáng)制處理的異常(空指針異常丶數(shù)組下標(biāo)越界異常丶算數(shù)異常丶類型轉(zhuǎn)換異常)
2).檢查異常(checked Exception):編譯器需要強(qiáng)制處理的異常(IOException丶SQLException)
二.異常處理的兩種方法
1.通過try丶catch和finally關(guān)鍵字在當(dāng)前位置進(jìn)行異常處理
public static void main(String[] a){ int sum = 0; while(true){ try { //以兩數(shù)相除除數(shù)不能為0進(jìn)行舉例 System.out.println("請(qǐng)依次輸入兩個(gè)數(shù)值進(jìn)行除法操作:"); Scanner scanner = new Scanner(System.in); int one =scanner.nextInt(); int two =scanner.nextInt(); sum = one/two; System.out.println("最終結(jié)果為:"+sum); } catch (Exception e) { //用catch將錯(cuò)誤進(jìn)行捕捉,這里可以使用多重catch,對(duì)于不同的錯(cuò)誤進(jìn)行捕捉,但最后的catch建議為Exception。 // TODO Auto-generated catch block //顯示錯(cuò)誤堆棧信息 e.printStackTrace(); }finally{ System.out.print("無(wú)論有沒有錯(cuò)誤我都會(huì)執(zhí)行"); } } } }
輸出:
2.通過try丶catch丶finally丶throw和throws拋出異常給函數(shù)調(diào)用者進(jìn)行處理
public class Try { public static void main(String[] a){ try{ Function(); //在函數(shù)調(diào)用者處對(duì)異常進(jìn)行處理 }catch(Exception e) { e.printStackTrace(); } } static void Function() throws Exception{ //通過throws將異常進(jìn)行拋出 System.out.println("請(qǐng)輸入一個(gè)數(shù)值進(jìn)行判斷:"); Scanner scanner = new Scanner(System.in); int one =scanner.nextInt(); if(one<100) { throw new Exception(); //若輸入的數(shù)值小于100則拋出異常 } } }
輸出:
3.自定義異常進(jìn)行處理
class MyException extends Exception{ //自定義異常,通過super方法傳遞異常信息給父級(jí) public MyException(){ super("這是我自定義的異常"); } } public class Try { public static void main(String[] a){ try{ Function(); }catch(MyException e) { e.printStackTrace(); } } static void Function() throws MyException{ System.out.println("請(qǐng)輸入一個(gè)數(shù)值進(jìn)行判斷:"); Scanner scanner = new Scanner(System.in); int one =scanner.nextInt(); if(one<100) { throw new MyException(); //將自定義異常進(jìn)行拋出 } } }
輸出:
三.異常鏈
有的時(shí)候我們會(huì)在處理一個(gè)異常的時(shí)候拋出一個(gè)新的異常,也就是異常的嵌套,但是最后我們得到的異常信息卻只有一個(gè)。
示例:
public class Try { public static void main(String[] a){ try{ Function1(); }catch(Exception e) { e.printStackTrace(); } } static void Function1() throws Exception{ try{ Function2(); }catch(Exception e){ throw new Exception(); } } static void Function2() throws Exception{ try{ Function3(); }catch(Exception e){ throw new Exception(); } } static void Function3() throws Exception{ throw new Exception(); } }
輸入結(jié)果:
這樣的話顯示出的異常就只有一個(gè)了,那我們?nèi)绻胱屵@條異常鏈中的所有異常信息全部輸出該怎么辦呢?方法很簡(jiǎn)單,我們?cè)趻伋霎惓5臅r(shí)候?qū)惓?duì)象也當(dāng)作參數(shù)進(jìn)行拋出就行了。
示例:
public class Try { public static void main(String[] a){ try{ Function1(); }catch(Exception e) { e.printStackTrace(); } } static void Function1() throws Exception{ try{ Function2(); }catch(Exception e){ throw new Exception("異常2",e); } } static void Function2() throws Exception{ try{ Function3(); }catch(Exception e){ throw new Exception("異常2",e); } } static void Function3() throws Exception{ throw new Exception("異常3"); } }
運(yùn)行結(jié)果:
到此,我們Java中的異常便是描述完了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。