1. 程式人生 > >Java 自定義異常類

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);