<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學(xué)習

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

     

    Java陷阱之a(chǎn)ssert關(guān)鍵字

    Java陷阱之a(chǎn)ssert關(guān)鍵字
     
    一、概述
     
    在C和C++語言中都有assert關(guān)鍵,表示斷言。
    在Java中,同樣也有assert關(guān)鍵字,表示斷言,用法和含義都差不多。
     
    二、語法
     
    在Java中,assert關(guān)鍵字是從JAVA SE 1.4 引入的,為了避免和老版本的Java代碼中使用了assert關(guān)鍵字導(dǎo)致錯誤,Java在執(zhí)行的時候默認是不啟動斷言檢查的(這個時候,所有的斷言語句都 將忽略!),如果要開啟斷言檢查,則需要用開關(guān)-enableassertions或-ea來開啟。
     
    assert關(guān)鍵字語法很簡單,有兩種用法:
     
    1、assert <boolean表達式>
    如果<boolean表達式>為true,則程序繼續(xù)執(zhí)行。
    如果為false,則程序拋出AssertionError,并終止執(zhí)行。
     
    2、assert <boolean表達式> : <錯誤信息表達式>
    如果<boolean表達式>為true,則程序繼續(xù)執(zhí)行。
    如果為false,則程序拋出java.lang.AssertionError,并輸入<錯誤信息表達式>。
     
    三、應(yīng)用實例
     
    下面給出一個例子,通過例子說明其用法:
     
    public class AssertFoo {
        public static void main(String args[]) {
            //斷言1結(jié)果為true,則繼續(xù)往下執(zhí)行
            assert true;
            System.out.println("斷言1沒有問題,Go!");
     
            System.out.println("\n-----------------\n");
     
            //斷言2結(jié)果為false,程序終止
            assert false : "斷言失敗,此表達式的信息將會在拋出異常的時候輸出!";
            System.out.println("斷言2沒有問題,Go");
        }
    }
     
    保存代碼到C:\AssertFoo.java,然后按照下面的方式執(zhí)行,查看控制臺輸出結(jié)果:
     
    1、編譯程序:
    C:\>javac AssertFoo.java
     
    2、默認執(zhí)行程序,沒有開啟-ea開關(guān):
    C:\>java AssertFoo
    斷言1沒有問題,Go!
     
    -----------------
     
    斷言2沒有問題,Go!
     
    3、開啟-ea開關(guān),執(zhí)行程序:
    C:\>java -ea AssertFoo
    斷言1沒有問題,Go!
     
    -----------------
     
    Exception in thread "main" java.lang.AssertionError: 斷言失敗,此表達式的信息將
    會在拋出異常的時候輸出!
            at AssertFoo.main(AssertFoo.java:10)
     
    四、陷阱
     
    assert關(guān)鍵字用法簡單,但是使用assert往往會讓你陷入越來越深的陷阱中。應(yīng)避免使用。筆者經(jīng)過研究,總結(jié)了以下原因:
     
    1、assert關(guān)鍵字需要在運行時候顯式開啟才能生效,否則你的斷言就沒有任何意義。而現(xiàn)在主流的Java IDE工具默認都沒有開啟-ea斷言檢查功能。這就意味著你如果使用IDE工具編碼,調(diào)試運行時候會有一定的麻煩。并且,對于Java Web應(yīng)用,程序代碼都是部署在容器里面,你沒法直接去控制程序的運行,如果一定要開啟-ea的開關(guān),則需要更改Web容器的運行配置參數(shù)。這對程序的移 植和部署都帶來很大的不便。
     
    2、用assert代替if是陷阱之二。assert的判斷和if語句差不多,但兩者的作用有著本質(zhì)的區(qū)別:assert關(guān)鍵字本意上是為測試 調(diào)試程序時使用的,但如果不小心用assert來控制了程序的業(yè)務(wù)流程,那在測試調(diào)試結(jié)束后去掉assert關(guān)鍵字就意味著修改了程序的正常的邏輯。
     
    3、assert斷言失敗將面臨程序的退出。這在一個生產(chǎn)環(huán)境下的應(yīng)用是絕不能容忍的。一般都是通過異常處理來解決程序中潛在的錯誤。但是使用斷言就很危險,一旦失敗系統(tǒng)就掛了。
     
     
    五、對assert的思考
     
    assert既然是為了調(diào)試測試程序用,不在正式生產(chǎn)環(huán)境下用,那應(yīng)該考慮更好的測試JUint來代替其做用,JUint相對assert關(guān)鍵的所提供的功能是有過之而無不及。當然完全可以通過IDE debug來進行調(diào)試測試。在此看來,assert的前途一片昏暗。
     
    因此,應(yīng)當避免在Java中使用assert關(guān)鍵字,除非哪一天Java默認支持開啟-ea的開關(guān),這時候可以考慮。對比一下,assert能給你帶來多少好處,多少麻煩,這是我們選擇是否使用的的原則。

    posted on 2008-07-16 15:06 找個美女做老婆 閱讀(1097) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲中文无码线在线观看| 亚洲色成人网站WWW永久| ww亚洲ww在线观看国产| 1000部啪啪未满十八勿入免费| 精品亚洲一区二区| 国产成人无码区免费内射一片色欲| 国产a v无码专区亚洲av| h视频在线免费观看| 中文字幕亚洲一区二区va在线| jizz免费在线观看| 亚洲精品无码专区久久久 | 噜噜综合亚洲AV中文无码| 成年女人免费v片| 亚洲av乱码中文一区二区三区 | 国产免费久久精品丫丫| 亚洲色婷婷六月亚洲婷婷6月| 国产情侣久久久久aⅴ免费| 亚洲精品成人网站在线播放| 在线观看无码AV网站永久免费| 亚洲一区二区三区国产精华液| 国产乱弄免费视频| 久久久受www免费人成| 亚洲AV人无码激艳猛片| 9久9久女女免费精品视频在线观看 | 亚洲日韩国产二区无码| 午夜亚洲国产成人不卡在线| 成人免费无码H在线观看不卡| 亚洲gv白嫩小受在线观看| 99久久久国产精品免费牛牛 | 亚洲一线产区二线产区精华| 免费观看的av毛片的网站| www免费黄色网| 亚洲国产精品网站久久| 免费一级毛片一级毛片aa| 在线看片免费人成视频播| 亚洲国产精品一区二区三区在线观看 | 全免费A级毛片免费看网站| 久久国产美女免费观看精品 | 亚洲人成网站在线播放vr| 国内精品免费麻豆网站91麻豆| 国产午夜亚洲精品不卡|