(1)任何一種程序設計語言設計的程序在運行時均可能出現錯誤。java
(2)捕獲錯誤最理想的是在編譯期間,但有的錯誤只有在運行時纔會發生。程序員
(3)對於這些錯誤,通常有兩種解決方法:編程
那麼什麼是編譯,什麼是運行呢?網絡
編譯:又分爲編譯和連接兩個過程。編譯是將源文件轉換爲機器可識別的二進制文件。連接是將這些二進制文件組合成系統能夠執行的可執行文件。this
運行:將編譯出來的可執行程序放在系統中進行運行。spa
Java異常:在java語言中,將程序執行中發生的不正常狀況稱爲異常。設計
java中的異經常使用於處理非預期的狀況,如文件沒找到、網絡錯誤、非法的參數等。3d
java程序運行過程當中的異常可分爲兩類:指針
異常處理機制:code
說明:
try{ //須要判斷是否出現異常的語句 }catch(Exception e){ //捕獲異常 }finally{ //不管是否出現異常,都會運行這裏的代碼 }
注意:若是有多個catch,在捕獲到前面的異常後,後面的就不會再捕獲了。
聲明拋出異常
package myjava; public class Test3 { public static void main(String[] args) { B b = new B(); try { b.test(); }catch(Exception e){ e.printStackTrace(); } } } class B{ int i; public void test() throws Exception{ B b = null; System.out.println(b.i); } }
輸出:
注意:當父類方法拋出異常,子類方法繼承父類對該方法進行重寫時,也須要拋出異常,同時拋出的異常範圍不能比父類的大。
人工拋出異常:
package myjava; public class Test3 { public static void main(String[] args) { B b = new B(); try { b.test(200); }catch(Exception e){ e.printStackTrace(); } } } class B{ int age; public void test(int age) throws Exception{ if (age>=0 && age <= 100) { System.out.println("合法"); }else { throw new Exception("年齡不合法"); } } }
輸出:
建立用戶自定義異常類:用戶自定義的異常類必須繼承現有的異常類
package myjava; public class Test3 { public static void main(String[] args) { B b = new B(); try { b.regist(-1); }catch(Exception e){ e.printStackTrace(); } } } class B{ public void regist(int num) throws Exception{ if (num<0) { throw new MyException("人數不能爲負值",3); }else { System.out.println("登記人數"+num); } } } class MyException extends Exception{ private int idnumber; public MyException(String message,int id) { super(message); this.idnumber = id; } public int getId() { return idnumber; } }
輸出:
而後就能夠拋出異常:
package myjava; public class Test3 { public static void main(String[] args) { B b = new B(); try { b.message(); }catch(Exception e){ e.printStackTrace(); } } } class B{ public void regist(int num) throws Exception{ if (num<0) { throw new MyException("人數不能爲負值",3); }else { System.out.println("登記人數"+num); } } public void message() throws Exception { try { regist(-1); }catch (MyException e){ System.out.println("登記失敗,出錯種類"+e.getId()); } System.out.println("本次登記結束"); } } class MyException extends Exception{ private int idnumber; public MyException(String message,int id) { super(message); this.idnumber = id; } public int getId() { return idnumber; } }
輸出: