• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Java中異常機制的深入研究

    發布: 2008-8-07 14:51 | 作者: 網絡轉載 | 來源: ccid | 查看: 35次 | 進入軟件測試論壇討論

    領測軟件測試網

    二、"異常"的處理過程 


    Java中由try…catch語法來處理"異常",將關聯有"異常類"的方法包含在try{}程序塊中,catch(){}關鍵字可以使用形參,用于和方法產生的"異常"對象結合。當調用某個方法時,引起異常事件發生的條件成立,便會拋出"異常",原來的程序流程將會在此方法處中斷,然后try模塊后緊跟的catch中的"形參"和此異常對象完成了結合,繼而進入了catch模塊中運行。具體過程舉例說明: 


    例2: 



    /*將關聯有異常的方法包含在try模塊中*/ 

    int myMethod(int dt){ 

    int data = 0; 

    try{ 

    int data = isLegal(dt); 

    }catch(LowZeroException e){ 

    System.out.println("發生數據錯誤!"); 



    return data; 





    三、"異常"的處理方法 


    有兩種方法處理"異常":第一種如例2,將含有"異常"出口的方法直接放到try塊中,然后由緊隨其后的catch塊捕捉。第二種是不直接監聽捕捉被引用方法的"異常",而是將這個"異常"關聯傳遞給引用方法,同時監聽捕捉工作也相應向上傳遞。 


    例3: 



    int myMethod2(int dt) 



    int data = 0; 

    try{ 

    data = myMethod(dt) 

    }catch(LowZeroException e){ 

    System.out.println("發生數據錯誤!"); 

    e.printStackTrace(); 



    return data; 




    int myMethod(int dt) throws LowZeroException 



    int data = isLegal(dt); //此處引用isLegal()方法,但并沒有捕捉它的"異常" 

    return data; 





    從上例中可以看到方法myMethod()與它引用的方法isLegal()產生的"異常"LowZeroException建立了關聯,也就是完成了將"異常"關聯的向上傳遞,此時的myMethod()方法體中雖然只有一個return返回語句,但它事實上同樣有兩種方式的函數出口,一種是由return返回的整形值,另一種則是返回方法名中的throws關鍵字所指的"異常類"的實例對象。相應的,監聽捕捉的工作交給了上一層方法myMethod2()。同樣的道理,myMethod2()也可以將"異常"通過throws的關聯繼續向上傳遞。這樣的話,一旦一個"異常"被捕捉到時,這個"異常"必有一個傳遞路徑,而如果我們在捕捉點的catch程序塊中加入printStackTrace()方法,便能清楚的看到這個"異常"是怎樣傳遞過來的。例如在例3如果有"異常"被捕捉到,e.printStackTrace()打印出來的結果將是: 


    LowZeroException: 


    at Example.isLegal 


    at Example myMethod 


    at Example.myMethod2 


    at Example main 


    從上結果中我們可以看到,從LowZeroException"異常"產生點,即包含throw new LowZeroException();子句的方法開始,然后一直追溯到產生當前線程的方法(注意:printStackTrace()并不是追溯到捕捉點結束,而是到產生當前線程的方法結束)。"異常"產生點產生的LowZeroException"異常"對象,首先被賦給了isLegal()關聯的LowZeroException類的無名引用,然后繼續賦給myMethod()關聯的LowZeroException類的無名引用,再繼續賦給myMethod2()中的catch塊中的形參e,最后在這里被處理掉,這個"異常"對象隨即消失?梢哉f,catch(){}就是"異常"對象的生命終結點。 


    另外還要注意一點,方法與"異常"的關聯可以一直向上傳遞,當傳遞到與main方法關聯后,即在main()方法的定義中使用了throws Exception,這時除了虛擬機沒有其它方法能夠引用main()方法,且在程序中可能看不到try…catch程序塊,但并不會產生錯誤,因為此時虛擬機會捕捉"異常",并且會默認的調用printStackTrace()方法打印出"異常"路徑?傊灰粋方法關聯了"異常",可以將這個"異常"關聯向上傳遞,但是最終必須使用catch來終止"異常",或者一直傳遞到main()方法交給Java虛擬機來結束"異常"對象的生命,否則是通不過編譯的。 


    四、使用"異常機制"的需要注意的幾點 


    1.一個方法中可能會產生多種不同的異常,你可以設置多個"異常"拋出點來解決這個問題。 


    2."異常"對象從產生點產生后,到被捕捉后終止生命的全過程中,實際上是一個傳值過程,所以你可以根據需要,來合理的控制檢測到"異常"的粒度。例如在例3中,如果你并不需要知道具體產生的是LowZeroException"異常",那么你可以使用"異常"的公共父類Exception來結合"異常"對象,即catch(Exception e){…}。同樣在"異常"與方法關聯的傳遞過程中,也可以根據需要控制關聯"異常"的粒度,即throws后面跟上異常對象的父類名。 


    3."異常機制"中還有一種特殊情況――RuntimeException"異常類"(見圖1),這個"異常類"和它的所有子類都有一個特性,就是"異常"對象一產生就被Java虛擬機直接處理掉,即在方法中出現throw 子句的地方便被虛擬機捕捉了。因此凡是拋出這種"運行時異常"的方法在被引用時,不需要有try…catch語句來處理"異常"。 

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    22/2<12

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>