異常: Error Exceptionjava
概述:
try {代碼塊1} :對代碼塊1進行代碼監控
catch(){代碼塊2}:當代碼1出現了對應捕獲的異常則執行此對應的代碼塊內容。
finally{代碼塊3} :表示不管如何,是否出現異常,都會執行裏面的代碼內容。
有異常:代碼塊1 ---> 代碼塊2 ---->代碼塊3 (出現異常之後,異常後面的代碼就不會執行了,代碼流程改變了。)
沒異常:代碼塊1 ---> 代碼塊3
咱們能夠分別捕獲多種異常,一旦發生那種異常就進入對應catch裏面的代碼塊。
捕獲的異常的順序:先子類到父類 先細後粗
可不能夠沒有finally塊?能夠
能夠不能夠沒有catch塊?沒有finally就必定要有catch.若是有finally語法上能夠沒有catch,咱們仍是要加上catchspa
編譯時異常:編譯期間就須要捕獲異常。也就是說必須有try catch捕獲
運行時異常:NullPointerException 。能夠根據須要有或者沒有。指針
1 try { 2 3 //咱們要對下面的代碼進行監控 4 //代碼塊1; 5 //引用數據類型爲null的時候,不能調用null上面的任何方法或者屬性。不然給出空指針異常。NullPointerException 6 // String s =null; 7 // s.equals("abc"); 8 9 // System.out.println(5/0); 10 11 12 System.out.println("hello"); 13 } catch (NullPointerException e) { 14 //代碼塊2;// 只有出現了NullPointerException的時候才執行 15 System.out.println("你的代碼出現了NullPointerException。。。。。"); 16 // e.printStackTrace(); 17 } catch (ArithmeticException e) { 18 //代碼塊2;// 只有出現了ArithmeticException的時候才執行 19 System.out.println("你的代碼出現了ArithmeticException。。。。。"); 20 // e.printStackTrace(); 21 } finally { 22 //代碼塊3; 23 System.out.println("這句代碼真的老是會執行嗎?"); 24 }
自定義異常:code
自定義一個異常類繼承Exception接口blog
public class OutOfAgeException extends Exception{ /** * 自定義異常處理 */ private static final long serialVersionUID = 1L; public OutOfAgeException(String msg){ super(msg); } }
寫一個方法拋出異常繼承
public static void age(int age) throws OutOfAgeException { if(age<0){ throw new OutOfAgeException("年齡不合法..."); }else{ System.out.println("年齡合法"); } }
在上訴代碼塊1中調用方法就行接口
throws:用來聲明一個方法可能產生的全部異常,不作任何處理而是將異常往上傳,誰調用我我就拋給誰。it
throw:則是用來拋出一個具體的異常類型。io