關於java異常調用


最近在公司做一個項目,因爲以前在學校裏面寫的小程序都不會用到異常處理,所以自己對這一塊不是很瞭解,自己寫異常類也就是沒想過的事情了。但是在公司幹活則一定會用到,所以算是自己寫了一個小程序,來幫助自己理解這幾個之間異常處理的順序。廢話不多說,開始進入正題。

編寫的小程序簡單,僅限於講清道理,大牛請繞道。^_^
01. 異常的處理順序
發起調用的類

package TestException;
public class ExceptionSort {
    public static void main(String[] args){
        ExceptionSort ex = new ExceptionSort();
        ex.firstLevel();
    }
    private void firstLevel(){
        try{
            System.out.println("我是第一層");
            ExceptionSort01 ex = new ExceptionSort01();
            //大家注意這個方法,傳入字符串和數字調用的方法不同
            ex.secondLevel("0");
        }catch(Exception e){
            System.out.println("我是第一層的異常處理");
        }
    }
}

被調用的類

package TestException;

public class ExceptionSort01 {
    protected void secondLevel(int mark){
        try{
            System.out.println("我是第二層被調用的!");
            if(mark == 0){
                throw new Exception("我是第二層拋出的異常");
            }
            System.out.println("沒有異常出現");
        }catch(Exception e){
            System.out.println("我是第二層的異常處理");
        }
    }

    protected void secondLevel(String str){
        if(str.equals("1234")){
            System.out.println("沒有錯誤");
        }
    }
}

在第一個類中的firstlevel方法中調用方法seconlevel方法時,如果傳入的參數是數字,那麼,在第二個類中調用的是有異常處理的方法,也就是有try和catch塊的方法,此時我在方法中主動拋出了一個異常,此時,程序直接進入到了secondlevel中的catch塊中處理異常,並沒有進入到firstlevel方法中的catch塊中處理異常。此時的程序結果輸出是:
我是第一層
我是第二層被調用的!
我是第二層的異常處理

如果給secondlevel傳入的是一個null值, 那麼在第二個類中調用的是沒有異常處理的那個方法,而且語句str.equals("1234") 就會出現異常,因爲方法沒有處理異常的catch塊, 那麼異常將會返回到上一層,也就是第一個類的方法中去處理異常,此時的程序的輸出結果是:
我是第一層
我是第一層的異常處理

總結:
如果一個方法中有了異常處理機制,那麼出現的異常就會在本方法中進行處理,如果出現異常的方法沒有異常處理機制,那麼異常就會拋到上一層,也就是調用該方法的方法中去處理,以此類推

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章