這篇文章主要講解了“JAVA異常處理方式是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“JAVA異常處理方式是什么”吧!
成都創(chuàng)新互聯(lián)主營雙臺子網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶App定制開發(fā),雙臺子h5微信小程序開發(fā)搭建,雙臺子網(wǎng)站營銷推廣歡迎雙臺子等地區(qū)企業(yè)咨詢
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í)行剩下的代碼 |
例子:
public class Test04 { public static void main(String[] args) { try{ int num = 1/0;//new ArithmeticException() System.out.println(num); }catch(InputMismatchException e){ //InputMismatchException e = new ArithmeticException(); System.out.println("除數(shù)不能為0"); } System.out.println("嘿嘿"); } }
|
注意事項
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、一般情況下我們都會在最后一個catch中加入Exception 獲取可能沒有捕獲的異常信息 |
例子
public class Test05 { public static void main(String[] args) { Scanner input = new Scanner(System.in); try{ System.out.println("請輸入被除數(shù)---->"); int num1 = input.nextInt(); System.out.println("請輸入除數(shù)---->"); int num2 = input.nextInt(); System.out.println(num1+"/"+num2+"="+(num1/num2)); }catch(InputMismatchException e){//這個異常對象中沒有維護異常的原因 所以通過getMessage獲取不到異常信息 null值 //e.printStackTrace(); System.out.println(e.getMessage()); System.out.println("用戶輸入有誤"); }catch(ArithmeticException e){//這個異常對象中維護異常的原因 所以通過getMessage可以獲取到異常信息 System.out.println(e.getMessage());//by zero System.out.println("除數(shù)不能為0"); }catch(Exception e){//Exception e = new 可能出現(xiàn)的異常(); 父類變量指向了子類對象 //多態(tài) System.out.println(e.getMessage()); System.out.println("外星人把頁面叼走了 請等待。。。"); } } }
|
注意事項:
PS:
一般情況下我們都會在最后一個catch中加入Exception 獲取可能沒有捕獲的異常信息 常見的異常的對象中的方法: * 異常中常見的方法: * 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處理 程序終止 輸出異常信息 也會執(zhí)行finally代碼塊 * 5、一般情況下我們都會在最后一個catch中加入Exception 獲取可能沒有捕獲的異常信息 * 6、一般情況下通過finally去關(guān)閉連接資源 |
例子:
public class Test06 { public static void main(String[] args) { Scanner input = null; try{ input = new Scanner(System.in); System.out.println("請輸入被除數(shù)---->"); int num1 = input.nextInt(); System.out.println("請輸入除數(shù)---->"); int num2 = input.nextInt(); System.exit(0);//關(guān)閉虛擬機 0正常退出 非0 強制退出 System.out.println(num1+"/"+num2+"="+(num1/num2)); }catch(InputMismatchException e){ System.out.println("用戶輸入有誤"); }catch(ArithmeticException e){ System.out.println("除數(shù)不能為0"); }catch(Exception e){ System.out.println("外星人把頁面叼走了 請等待。。。"); }finally{ System.out.println("我被執(zhí)行了"); //在這里關(guān)閉的 input.close(); } } }
|
注意事項:
PS: | finally一定會被執(zhí)行 return 以及異?;蛘呤钦G闆r下都會執(zhí)行finally代碼 System.exit(數(shù)字) 退出虛擬機 0 正常 非0 強制
|
4:throws 聲明一個異常
語法格式:
* 注意格式: * 方法() throws 異常類型1,異常類型2。。。{} |
注意事項:
s不要忘記 一個方法可以聲明多個異常信息 某個方法如果對外聲明一個異常,那么調(diào)用者一定要解決當(dāng)前異常。解決方案: A、try-catch B、繼續(xù)向外聲明 |
案例:
public class Test08 { public static void main(String[] args)throws Exception { /*try{ //1、調(diào)用add方法 add(1,2); }catch(Exception e){ }*/ System.out.println(add(1,43)); } /* * 計算兩個數(shù)相加 * 調(diào)用這個方法可能出現(xiàn)異常 * 這個方法就必須對外聲明一個異常 */ public static int add(int num1,int num2)throws Exception{ return num1+num2; } }
|
5:throw拋出異常信息
語法格式:
throw new 異常類型(); PS:拋出異常是在方法內(nèi)部編寫的 |
注意事項:
throw 拋出異常在方法體體編寫 一般情況下和throws一起使用
|
案例:
public class Test09 { public static void main(String[] args) { //1、創(chuàng)建一個user對象 User u = new User(); //2、解決異常 try { u.setGender(12);//new Exception(); } catch (Exception e) { e.printStackTrace(); } } } class User{ private int gender; public User() { // TODO Auto-generated constructor stub } public int getGender() { return gender; } public void setGender(int gender) throws Exception{ //判定gender的值 if(gender==0||gender==1){ this.gender = gender; }else{ //拋出一個異常 throw new Exception(); } } }
|
6:自定義異常:
自定義異常的步驟:
* 如何自定義異常: * 1、創(chuàng)建一個類 讓當(dāng)前類要么繼承Exception 要么繼承RuntimeException * 2、編寫當(dāng)前類的構(gòu)造器 : * a、一定要寫空構(gòu)造器 * b、一定要寫一個帶異常原因描述的構(gòu)造器 (帶一個String參數(shù)的構(gòu)造器) * 3、在構(gòu)造器內(nèi)部通過super()調(diào)用父類的構(gòu)造器即可 |
自定義異常如何獲取異常信息:類圖:
實例:
public class GenderException extends Exception{ public GenderException(){ } public GenderException(String str){ super(str); } }
|
測試類:
public class Test11 { public static void main(String[] args) { //1、創(chuàng)建一個Person對象 Person p = new Person(); try{ p.setGender(10); }catch(GenderException e){ System.out.println(e.getMessage()); } System.out.println(p.getGender()==0?"女生":"男生"); } } class Person{ private int gender; public Person() { // TODO Auto-generated constructor stub } public int getGender() { return gender; } public void setGender(int gender) throws GenderException,NullPointerException{ if(gender==0||gender==1){ this.gender = gender; }else{ //拋出異常 throw new GenderException("性別賦值錯誤"); } } }
|
PS:當(dāng)int作為屬性時它是具有默認值,默認值是0.而這個值有可能導(dǎo)致程序運行期間出現(xiàn)不穩(wěn)定因素
感謝各位的閱讀,以上就是“JAVA異常處理方式是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對JAVA異常處理方式是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
當(dāng)前題目:JAVA異常處理方式是什么
文章URL:
http://weahome.cn/article/ijdcjh.html