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

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

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

    MicroFish

    Open & Open hits
    隨筆 - 33, 文章 - 2, 評論 - 4, 引用 - 0
    數據加載中……

    JAVA斷言使用

    相信學過c,c++的朋友一定不會對斷言感到陌生。下面介紹一下斷言在JAVA中的使用,JAVA是從JDK1.4才開始支持斷言的(添加了關鍵字assert),請注意老版的JRE不支持。

    斷言概述


    ??編寫代碼時,我們總是會做出一些假設,斷言就是用于在代碼中捕捉這些假設
    ??可以將斷言看作是異常處理的一種高級形式
    ??斷言表示為一些布爾表達式,程序員相信在程序中的某個特定點該表達式值為真
    ??可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言。同樣,程序投入運行后,最終用戶在遇到問題時可以重新起用斷言。
    ??使用斷言可以創建更穩定,品質更好且易于除錯的代碼
    ??當需要在一個值為FALSE時中斷當前操作的話,可以使用斷言
    ??單元測試必須使用斷言(Junit/JunitX)
    ??除了類型檢查和單元測試外,斷言還提供了一種確定個種特性是否在程序中得到維護的極好的方法
    ??使用斷言使我們向按契約式設計更近了一部

    常見的斷言特性


    ??前置條件斷言:代碼執行之前必須具備的特性
    ??后置條件斷言:代碼執行之后必須具備的特性
    ??前后不變斷言:代碼執行前后不能變化的特性

    斷言使用方式


    ??斷言可以有兩種形式
    ??1.assert?Expression1
    ??2.assert?Expression1:Expression2
    ??其中Expression1應該總是一個布爾值,Expression2是斷言失敗時輸出的失敗消息的字符串。如果Expression1為假,則拋出一個?AssertionError,這是一個錯誤,而不是一個異常,也就是說是一個不可控制異常(unchecked?Exception),AssertionError由于是錯誤,所以可以不捕獲,但不推薦這樣做,因為那樣會使你的系統進入不穩定狀態。

    起用斷言


    ??斷言在默認情況下是關閉的,要在編譯時啟用斷言,需要使用source1.4標記?既javac?source1.4?Test.java?,在運行時啟用斷言需要使用?-ea參數?。要在系統類中啟用和禁用斷言可以使用?-esa?和?-dsa參數。
    ??
    例如:
    public class AssertExampleOne{
    ?? public AssertExampleOne(){}
    ?? public static void main(String args[]){
    ????? int x=10;
    ????? System.out.println("Testing Assertion that x==100");
    ????? assert x==100:"Out assertion failed!";
    ????? System.out.println("Test passed!");
    ?? }
    }

    如果編譯時未加?-source1.4,則編譯通不過
    在執行時未加?-ea?時輸出為
    Testing?Assertion?that?x==100
    Test?passed
    jre忽略了斷言的就代碼,而使用了該參數就會輸出為
    Testing?Assertion?that?x==100
    Exception?in?thread?"main"?java.lang.AssertionError:?Out?assertion?failed!
    ????????at?AssertExampleOne.main(AssertExampleOne.java:6)

    斷言的副作用


    ??由于程序員的問題,斷言的使用可能會帶來副作用?,例如:
    ??boolean?isEnable=false;
    ??//...
    ??assert?isEnable=true;
    ??這個斷言的副作用是因為它修改了程序中變量的值并且未拋出錯誤,這樣的錯誤如果不細心的檢查是很難發現的。但是同時我們可以根據以上的副作用得到一個有用的特性,根據它來測試斷言是否打開。

    ?public?class?AssertExampleTwo{

    ???public?static?void?main(String?args[]){
    ?????boolean?isEnable=false;
    ?????//...
    ?????assert?isEnable=true;
    ?????if(isEnable==false){
    ???????throw?new?RuntimeException("Assertion?shoule?be?enable!");
    ?????}
    ???}
    }

    何時需要使用斷言


    ??1.可以在預計正常情況下程序不會到達的地方放置斷言?:assert?false
    ??2.斷言可以用于檢查傳遞給私有方法的參數。(對于公有方法,因為是提供給外部的接口,所以必須在方法中有相應的參數檢驗才能保證代碼的健壯性)
    ??3.使用斷言測試方法執行的前置條件和后置條件
    ??4.使用斷言檢查類的不變狀態,確保任何情況下,某個變量的狀態必須滿足。(如age屬性應大于0小于某個合適值)

    什么地方不要使用斷言


    ??斷言語句不是永遠會執行,可以屏蔽也可以啟用
    因此:
    ??1.不要使用斷言作為公共方法的參數檢查,公共方法的參數永遠都要執行
    ??2.斷言語句不可以有任何邊界效應,不要使用斷言語句去修改變量和改變方法的返回值

    參考:
    http://jcp.org/en/jsr/detail?id=41
    http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html
    http://www-128.ibm.com/developworkers/cn/java/jdiag0723/
    http://www-128.ibm.com/developworkers/cn/java/jmerlin/part9/

    posted on 2006-10-24 16:17 劉璐 閱讀(21048) 評論(2)  編輯  收藏 所屬分類: Java

    評論

    # re: JAVA斷言使用  回復  更多評論   

    寫的相當不錯
    2013-08-27 18:41 | songlei

    # re: JAVA斷言使用  回復  更多評論   

    非常好,謝謝博主
    2014-08-07 17:32 | yunsweet
    主站蜘蛛池模板: 日本午夜免费福利视频| 五月婷婷在线免费观看| 亚洲AV无码不卡在线观看下载| 香蕉视频亚洲一级| 午夜国产羞羞视频免费网站| 色偷偷亚洲第一综合| 亚洲成人影院在线观看| 一边摸一边爽一边叫床免费视频 | 亚洲AV无码精品色午夜在线观看| 免费看成人AA片无码视频吃奶| 国产精品亚洲аv无码播放| 国产99视频精品免费专区| 亚洲精品在线网站| A在线观看免费网站大全| 亚洲另类无码一区二区三区| 又粗又硬又黄又爽的免费视频| 搜日本一区二区三区免费高清视频| 亚洲AV网站在线观看| 成年女人A毛片免费视频| 亚洲成在人天堂一区二区| 4hu四虎最新免费地址| 亚洲国产欧美日韩精品一区二区三区| 日韩毛片无码永久免费看| av成人免费电影| 综合自拍亚洲综合图不卡区| 欧美三级在线电影免费| 免费国产va视频永久在线观看| 亚洲深深色噜噜狠狠爱网站| 18未年禁止免费观看| 亚洲aⅴ无码专区在线观看春色| 亚洲一级特黄大片在线观看| 十八禁无码免费网站| 亚洲国产精品嫩草影院| 亚洲精品无码不卡在线播放HE| free哆啪啪免费永久| 国产亚洲精品精品精品| 亚洲一区二区在线视频| 国产免费AV片无码永久免费| 国产精品免费无遮挡无码永久视频 | 亚洲AV永久无码精品一福利| 亚洲伊人久久精品影院|