Java 自定義異常類
/*
* 自定義異常類
* sun提供了很多的異常類給我們用於描述程式中各種的不正常情況,但是sun給我提供異常類還不足以描述我們現實生活中所有不正常情況,那麼這時候我們就需要自定義異常類。
*
* 需求: 模擬feiQ上線的時候,如果沒有插上網線,那麼就丟擲一個沒有插上網線的異常,如果已經插上了網上,那麼就正常顯示好友列表。
*
* 自定義異常類的步驟: 自定義一個類繼承Exception即可。
*
* */
class NoIpException extends Exception{ //自定義了一個沒有網線的異常類了。public NoIpException(String message){ super(message); //呼叫了Exception一個引數的建構函式。 } } public class Exception_03 { public static void main(String[] args) { // TODO Auto-generated method stub String ip = "192.168.10.100"; ip = null; try{ feiQ(ip); // 如果呼叫了一個宣告丟擲異常型別的方法,那麼呼叫者必須要處理。}catch(NoIpException e){ e.printStackTrace(); System.out.println("馬上插上網線!"); } } public static void feiQ(String ip) throws NoIpException{ if(ip==null){ throw new NoIpException("沒有插網線啊,小白!"); } System.out.println("正常顯示好友列表.."); } }
需求:模擬你去吃木桶飯,如果帶錢少於了10塊,那麼就丟擲一個沒有帶夠錢的異常物件,如果帶夠了,那麼就可以吃上香噴噴的地溝油木桶飯.
//定義沒錢的異常 class NoMoneyException extends Exception { public NoMoneyException(String message){ super(message); } } class Demo3 { public static void main(String[] args) { //System.out.println("Hello World!"); try{ eat(9); }catch(NoMoneyException e){ e.printStackTrace(); System.out.println("跟我洗碗一個月!!"); } } public static void eat(int money) throws NoMoneyException{ if(money<10){ throw new NoMoneyException("吃霸王餐"); } System.out.println("吃上了香噴噴的地溝油木桶飯!!"); } }
異常體系:
--------| Throwable 所有錯誤或者異常的父類
--------------| Error (錯誤)
--------------| Exception ( 異常 ) 異常一般都通過程式碼處理
------------------| 執行時異常: 如果一個方法內部丟擲了一個執行時異常,那麼方法上 可以宣告也可以不 宣告,呼叫者可以以處理也可以不處理。
------------------| 編譯時異常(非執行時異常、受檢異常): 如果一個方法內部丟擲了一個編譯時異常物件,那麼方法上就必須要宣告,而且呼叫者也必須要處理。
執行時異常: RuntimeException以及RuntimeException子類 都是屬於執行時異常。
編譯時異常: 除了執行時異常就是編譯異常。
疑問: 為什麼java編譯器會如此嚴格要求編譯時異常,對執行時異常如此寬鬆?
執行時異常都是可以通過程式設計師良好的程式設計習慣去避免,所以java編譯器就沒有嚴格要求處理執行時異常。
*/ import java.security.acl.*; class Demo4 { public static void main(String[] args) throws InterruptedException { int[] arr = null; div(4,0,arr); Object o = new Object(); o.wait(); } public static void div(int a , int b ,int[] arr) { if(b==0){ return; } int c = a/b; System.out.println("c = "+c); if(arr!=null){ System.out.println("陣列的長度: "+arr.length);