您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java異常處理機制實例分析”,在日常操作中,相信很多人在Java異常處理機制實例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java異常處理機制實例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
拋出異常,在執行一個方法時,如果發送了異常,則這個方法生成代表該異常的一個對象,停止當前執行的 路徑,并把異常提交給jre。
捕獲異常:jre得到該異常后,虛招相應的代碼來處理該異常。jre在方法的調用棧中查找,從生成異常的 方法開始回溯,直到找到相應的異常處理代碼為止。
歐克,我們現在知道異常的定義是什么,那我們就應該如何去捕捉異常,然后去處理異常。
首先我們先看一段代碼:
package AbnormalTest; import java.util.InputMismatchException; import java.util.Scanner; public class test1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); try { System.out.print("請輸入被除數:"); int a = input.nextInt(); System.out.print("請輸入除數:"); int b = input.nextInt(); int sum = b/a; System.out.println("結果是:"+sum); System.out.println("程序無異常,執行完畢!"); }catch (Exception e){ //通用異常 //printStackTrace()方法是將堆棧異常的錯誤信息打印出來(后期學習框架后我們一般提交或 者回滾事務) e.printStackTrace(); System.out.println("程序異常,請重試!"); return ; }finally { //不管是否發生了異常,都會執行finally內的代碼,通常用于資源的關閉 System.out.println("------------------------------"); System.out.println("程序結束,資源已經關閉,歡迎再次使用"); input.close(); //關閉Scanner對象,節省資源 } } }
代碼解釋:
上述代碼中有try-catch-finally結構,他們分別的作用是什么?
try:我們把可能出現異常的代碼用try去包括起來
catch :只要try代碼塊里面的代碼運行時發生了異常,就會進入catch來捕捉異常
finally:不管之前代碼怎么執行,都會執行finally的代碼塊!!
運行結果示例:
正常時:
異常時:
當被除數為0時,將會觸發異常,進入catah內進行捕捉,但是不管有沒有異常,都會執行finally內的程序輸出:程序結束,資源已經關閉,歡迎再次使用
我們知道,在一段代碼中可能不止一個異常,比如上述代碼,可能存在被除數為0的異常,也可能輸入字符進行計算的輸入異常,或者可能存在數字格式化異常等等,這樣我們就可以使用多catch來捕捉異常:
還是以上面的代碼為例:
import java.util.InputMismatchException; import java.util.Scanner; public class test1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); try { System.out.print("請輸入被除數:"); int a = input.nextInt(); System.out.print("請輸入除數:"); int b = input.nextInt(); int sum = b/a; System.out.println("結果是:"+sum); System.out.println("程序無異常,執行完畢!"); }catch (InputMismatchException e){ //多重catch結構,這里捕捉輸入異常 e.printStackTrace(); System.out.println("程序輸入異常,請重試!"); }catch (Exception e){ //這里捕捉通用異常(其他異常都可以在這里進行捕捉) e.printStackTrace(); System.out.println("程序異常,請重試!"); return ; }finally { //不管是否發生了異常,都會執行finally內的代碼,通常用于資源的關閉 System.out.println("------------------------------"); System.out.println("程序結束,資源已經關閉,歡迎再次使用"); input.close(); //關閉Scanner對象,節省資源 } } }
當輸入不是為數字的時候:
這樣我們可以看出,在第一個catch內就已經捕捉到了
假設我定義了一個方法,告知該方法可能會發送某種異常(聲明異常),調用者調用該方法的時候就務必要對該異常進行處理。
首先我們定義一個錯誤類:
學生類:
package ExceptionText; /** * 異常測試 */ public class Student { private String name; private int age; private char sex; public void setName(String name) { this.name = name; } public String getName() { return name; } public int getAge() { return age; } public char getSex() { return sex; } public void setAge(int age) throws Exception { if (age < 101 && age > 0) { this.age = age; } else { throw new Exception("年齡輸入有誤!"); } } public void setSex(char sex) throws Exception { if (sex == '男' || sex == '女') { this.sex = sex; } else { throw new Exception("性別輸入有誤"); } } }
測試類:
package ExceptionText; public class TestMain { public static void main(String[] args) { Student stu = new Student(); stu.setName("小紅"); try { stu.setAge(50); stu.setSex('k'); System.out.println("我叫:"+stu.getName()+"年齡:"+stu.getAge()+"我的性別是:"+stu.getSex()); } catch (Exception e) { e.printStackTrace(); } } }
當出入都正確的時候:
當年齡輸入不正確的時候:
當性別輸入不正確的時候:
注意:如果存在多個異常,那么會拋出第一個出現的異常。
當RuntimeException的運行時異常的子類無法滿足我們的需求的時候,我們也可以自定義運行時異常和拋出自定義的異常信息來滿足我們的需求,但是要注意:自定義的運行時異常要繼承RuntimeException!!!
自定義異常類:
//這個類是繼承了RuntimeException public class AgeException extends RuntimeException { //構造方法 public AgeException(String message) { super(message); } }
學生信息類:
package CustomizeException; public class Student { private String name; private int age; private char sex; public void setName(String name) { this.name = name; } public String getName() { return name; } public int getAge() { return age; } public char getSex() { return sex; } //方法 //使用throws 來聲明異常,就是這個方法內可能存在異常,先事先聲明 public void setAge(int age) throws Exception { if (age < 101 && age > 0) { this.age = age; } else { //如果不符合上面的if判斷 throw new Exception("年齡輸入有誤!"); //這里就要用thrwo 來拋出異常, } } public void setSex(char sex) throws Exception { if (sex == '男' || sex == '女') { this.sex = sex; } else { throw new AgeException("這是自定義異常,性別輸入有誤"); } } }
測試類:
package ExceptionText; public class TestMain { public static void main(String[] args) { Student stu = new Student(); stu.setName("小紅"); try { stu.setAge(18); stu.setSex('女'); System.out.println("我叫:"+stu.getName()+"年齡:"+stu.getAge()+"我的性別是:"+stu.getSex()); } catch (Exception e) { e.printStackTrace(); } } }
這個部分的代碼和上面第三部分的一致,可以參考上面的示例。
到此,關于“Java異常處理機制實例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。