溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JAVA異常處理方式是什么

發(fā)布時(shí)間:2021-12-30 15:33:12 來(lái)源:億速云 閱讀:141 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“JAVA異常處理方式是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“JAVA異常處理方式是什么”吧!

1:try-catch

結(jié)構(gòu):

*  結(jié)構(gòu):
 * try{
 * 可能出現(xiàn)異常de代碼段
 * }catch(可能出現(xiàn)的異常){
 * 解決辦法
 * }

 
順序:

*  try-catch的執(zhí)行順序:
 *   1、執(zhí)行try塊中的代碼塊  如果出現(xiàn)異常
 *    2、通過出現(xiàn)的異常去匹配 catch中聲明的異常類型
 *    3、如果匹配成功 執(zhí)行catch中的代碼塊         如果匹配失敗  jvm處理當(dāng)前異常信息 (終止程序 輸出異常信息)
 *    4、繼續(xù)執(zhí)行剩下的代碼

 
例子:

  1. public class Test04 {  

  2.     public static void main(String[] args) {  

  3.         try{  

  4.             int num = 1/0;//new ArithmeticException()  

  5.             System.out.println(num);  

  6.         }catch(InputMismatchException e){ //InputMismatchException e = new ArithmeticException();  

  7.             System.out.println("除數(shù)不能為0");  

  8.         }  

  9.           

  10.         System.out.println("嘿嘿");  

  11.           

  12.     }  

  13. }  

 
注意事項(xiàng)

PS:只能處理一種異常信息。

 

2:try-多重catch

結(jié)構(gòu):

*  結(jié)構(gòu):
 *   try{
 *   可能出現(xiàn)異常的代碼
 *   }catch(異常類型1 e1){
 *   解決方案1
 *   }catch(異常類型2 e2){
 *   解決方案2
 *   }catch(異常類型3 e3){
 *   解決方案3
 *   }。。。。{
 *   }

 
順序

* 執(zhí)行順序:
 * 1、執(zhí)行try塊 如果出現(xiàn)異常
 * 2、以此匹配多重catch中聲明的異常
 * 3、如果匹配成功 執(zhí)行當(dāng)前匹配成功的catch塊 try-catch塊執(zhí)行完畢 繼續(xù)執(zhí)行下面的代碼
 * 4、如果匹配失敗 交由jvm處理 程序終止 輸出異常信息
 * 5、一般情況下我們都會(huì)在最后一個(gè)catch中加入Exception 獲取可能沒有捕獲的異常信息

 
例子

  1. public class Test05 {  

  2.     public static void main(String[] args) {  

  3.           

  4.         Scanner input = new Scanner(System.in);  

  5.           

  6.         try{  

  7.             System.out.println("請(qǐng)輸入被除數(shù)---->");  

  8.             int num1 = input.nextInt();  

  9.             System.out.println("請(qǐng)輸入除數(shù)---->");  

  10.             int num2 = input.nextInt();  

  11.             System.out.println(num1+"/"+num2+"="+(num1/num2));  

  12.               

  13.         }catch(InputMismatchException e){//這個(gè)異常對(duì)象中沒有維護(hù)異常的原因 所以通過getMessage獲取不到異常信息  null值  

  14.             //e.printStackTrace();   

  15.             System.out.println(e.getMessage());  

  16.             System.out.println("用戶輸入有誤");  

  17.         }catch(ArithmeticException e){//這個(gè)異常對(duì)象中維護(hù)異常的原因 所以通過getMessage可以獲取到異常信息  

  18.             System.out.println(e.getMessage());//by zero  

  19.             System.out.println("除數(shù)不能為0");  

  20.               

  21.               

  22.         }catch(Exception e){//Exception e = new 可能出現(xiàn)的異常();   父類變量指向了子類對(duì)象   

  23.             //多態(tài)  

  24.             System.out.println(e.getMessage());  

  25.             System.out.println("外星人把頁(yè)面叼走了 請(qǐng)等待。。。");  

  26.         }  

  27.           

  28.     }  

  29. }  

 
注意事項(xiàng):

PS:
  1. 一般情況下我們都會(huì)在最后一個(gè)catch中加入Exception 獲取可能沒有捕獲的異常信息

  2. 常見的異常的對(duì)象中的方法:

* 異常中常見的方法:
      * e.getMessage() -->獲取異常的原因藐視
      * e.printStackTrace()  -->打印異常的出現(xiàn)行數(shù)以及異常的全限定名* e.toString  --> 異常的全限定名

 

3:try-多重catch-finally

結(jié)構(gòu):

* 結(jié)構(gòu):
 * try{
 *   可能出現(xiàn)異常的代碼
 *   }catch(異常類型1 e1){
 *   解決方案1
 *   }catch(異常類型2 e2){
 *   解決方案2
 *   }catch(異常類型3 e3){
 *   解決方案3
 *   }。。。。{
 *   }finally{
 *   代碼塊
 *   }

 
順序:

* 執(zhí)行順序:
 * 1、執(zhí)行try塊 如果出現(xiàn)異常
 * 2、以此匹配多重catch中聲明的異常
 * 3、如果匹配成功 執(zhí)行當(dāng)前匹配成功的catch塊  執(zhí)行finally代碼塊 try-catch-finally塊執(zhí)行完畢 繼續(xù)執(zhí)行下面的代碼
 * 4、如果匹配失敗 交由jvm處理 程序終止 輸出異常信息 也會(huì)執(zhí)行finally代碼塊
 * 5、一般情況下我們都會(huì)在最后一個(gè)catch中加入Exception 獲取可能沒有捕獲的異常信息
 * 6、一般情況下通過finally去關(guān)閉連接資源

 
例子:

  1. public class Test06 {  

  2.     public static void main(String[] args) {  

  3.         Scanner input  = null;  

  4.         try{  

  5.               

  6.             input = new Scanner(System.in);  

  7.             System.out.println("請(qǐng)輸入被除數(shù)---->");  

  8.             int num1 = input.nextInt();  

  9.             System.out.println("請(qǐng)輸入除數(shù)---->");  

  10.             int num2 = input.nextInt();  

  11.             System.exit(0);//關(guān)閉虛擬機(jī) 0正常退出  非0 強(qiáng)制退出  

  12.             System.out.println(num1+"/"+num2+"="+(num1/num2));  

  13.               

  14.         }catch(InputMismatchException e){  

  15.             System.out.println("用戶輸入有誤");  

  16.         }catch(ArithmeticException e){  

  17.             System.out.println("除數(shù)不能為0");  

  18.         }catch(Exception e){  

  19.             System.out.println("外星人把頁(yè)面叼走了 請(qǐng)等待。。。");  

  20.         }finally{  

  21.               

  22.             System.out.println("我被執(zhí)行了");  

  23.             //在這里關(guān)閉的  

  24.             input.close();  

  25.         }  

  26.           

  27.     }  

  28. }  

 
注意事項(xiàng):

PS:
  1. finally一定會(huì)被執(zhí)行 return 以及異?;蛘呤钦G闆r下都會(huì)執(zhí)行finally代碼

  2. System.exit(數(shù)字) 退出虛擬機(jī) 0 正常 非0 強(qiáng)制

 
 

4:throws 聲明一個(gè)異常

語(yǔ)法格式:

* 注意格式:
 * 方法() throws 異常類型1,異常類型2。。。{}

 
注意事項(xiàng):

  1. s不要忘記 一個(gè)方法可以聲明多個(gè)異常信息

  2. 某個(gè)方法如果對(duì)外聲明一個(gè)異常,那么調(diào)用者一定要解決當(dāng)前異常。解決方案:

    A、try-catch     B、繼續(xù)向外聲明

 
案例:

  1. public class Test08 {  

  2.     public static void main(String[] args)throws Exception {  

  3.         /*try{

  4.              

  5.             //1、調(diào)用add方法

  6.             add(1,2);

  7.         }catch(Exception e){

  8.              

  9.         }*/  

  10.         System.out.println(add(1,43));  

  11.           

  12.     }  

  13.       

  14.     /*

  15.      * 計(jì)算兩個(gè)數(shù)相加

  16.      * 調(diào)用這個(gè)方法可能出現(xiàn)異常

  17.      * 這個(gè)方法就必須對(duì)外聲明一個(gè)異常

  18.      */  

  19.     public static int add(int num1,int num2)throws Exception{  

  20.         return num1+num2;  

  21.     }  

  22.       

  23. }  

 

5:throw拋出異常信息

語(yǔ)法格式:

throw new 異常類型();
PS:拋出異常是在方法內(nèi)部編寫的

 
注意事項(xiàng):

  1. throw 拋出異常在方法體體編寫

  2. 一般情況下和throws一起使用

 
案例:

  1. public class Test09 {  

  2.     public static void main(String[] args) {  

  3.         //1、創(chuàng)建一個(gè)user對(duì)象  

  4.         User u = new User();  

  5.         //2、解決異常  

  6.         try {  

  7.             u.setGender(12);//new Exception();  

  8.         } catch (Exception e) {  

  9.             e.printStackTrace();  

  10.         }  

  11.           

  12.           

  13.     }  

  14.       

  15.       

  16. }  

  17. class User{  

  18.       

  19.     private int gender;  

  20.       

  21.     public User() {  

  22.         // TODO Auto-generated constructor stub  

  23.     }  

  24.   

  25.     public int getGender() {  

  26.         return gender;  

  27.     }  

  28.   

  29.     public void setGender(int gender) throws Exception{  

  30.         //判定gender的值  

  31.         if(gender==0||gender==1){  

  32.             this.gender = gender;  

  33.         }else{  

  34.             //拋出一個(gè)異常  

  35.             throw new Exception();  

  36.         }  

  37.     }  

  38. }  

6:自定義異常:

自定義異常的步驟:

* 如何自定義異常:
 * 1、創(chuàng)建一個(gè)類 讓當(dāng)前類要么繼承Exception 要么繼承RuntimeException
 *  2、編寫當(dāng)前類的構(gòu)造器  :
 *   a、一定要寫空構(gòu)造器
 *   b、一定要寫一個(gè)帶異常原因描述的構(gòu)造器 (帶一個(gè)String參數(shù)的構(gòu)造器)
 *  3、在構(gòu)造器內(nèi)部通過super()調(diào)用父類的構(gòu)造器即可

 
自定義異常如何獲取異常信息:類圖:
JAVA異常處理方式是什么 
實(shí)例:

  1. public class GenderException extends Exception{  

  2.       

  3.     public GenderException(){  

  4.           

  5.     }  

  6.       

  7.     public GenderException(String str){  

  8.         super(str);  

  9.     }  

  10.       

  11. }  

 
測(cè)試類:

  1. public class Test11 {  

  2.     public static void main(String[] args) {  

  3.           

  4.           

  5.         //1、創(chuàng)建一個(gè)Person對(duì)象  

  6.         Person p = new Person();  

  7.         try{  

  8.             p.setGender(10);  

  9.               

  10.         }catch(GenderException e){  

  11.             System.out.println(e.getMessage());  

  12.         }  

  13.           

  14.         System.out.println(p.getGender()==0?"女生":"男生");  

  15.           

  16.           

  17.     }  

  18. }  

  19. class Person{  

  20.       

  21.     private int gender;  

  22.       

  23.     public Person() {  

  24.         // TODO Auto-generated constructor stub  

  25.     }  

  26.   

  27.     public int getGender() {  

  28.         return gender;  

  29.     }  

  30.   

  31.     public void setGender(int gender) throws GenderException,NullPointerException{  

  32.         if(gender==0||gender==1){  

  33.             this.gender = gender;             

  34.         }else{  

  35.             //拋出異常  

  36.             throw new GenderException("性別賦值錯(cuò)誤");  

  37.         }  

  38.     }  

  39.       

  40.       

  41.       

  42.       

  43. }  

 
PS:當(dāng)int作為屬性時(shí)它是具有默認(rèn)值,默認(rèn)值是0.而這個(gè)值有可能導(dǎo)致程序運(yùn)行期間出現(xiàn)不穩(wěn)定因素

感謝各位的閱讀,以上就是“JAVA異常處理方式是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)JAVA異常處理方式是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(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)容。

AI