轉載 Assert斷言知識

來源:互聯網
上載者:User

Assertion是用於在開發期間測試自己的些假設,當部屬程式時則會被清除。這能夠快速和有效地檢測與修正程式中的錯誤。該特性從Java 1.4開始被支援。

一、Assertion語句的兩種形式:

1, 一種最簡單的形式:assert Expression1;
2, 另一種是: assert Expression1: Expression2;
其中Expression1必須是boolean值,如果Expression1結果ture則程式正常運行,如果為false則出現AssertionError異常;Expression2可以中是能夠產生值的任何內容,這個運算式用於產生字串訊息,該訊息顯示在棧軌跡內,以提供更多的調試資訊。

二、樣本:

第一種形式:
public class AssertDemo {
    public static void main (String[] args) {
        int argsLength = args.length;
        assert(argsLength > 0);

        for (String s : args) {
            System.out.println(" > " + s);
        }
    }
}
編譯之後,在運行時需要使用-ea或-enableassertions來啟用Assertion,因為Assertion是預設禁用的。
在這個例子中如果使用java -ea AssertDemo則會出現拋出AssertionError異常:
Exception in thread "main" java.lang.AssertionError
        at AssertDemo.main(AssertDemo.java:5)

第二種形式:
另外還可以使用第二種方式增加額外的資訊:

public class AssertDemo {
    public static void main (String[] args) {
        int argsLength = args.length;
        assert(argsLength > 0): "Arguments expected.";

        for (String s : args) {
            System.out.println(" > " + s);
        }
    }
}
再一次編譯並使用java -ea AssertDemo 執行後將得到如下資訊:
Exception in thread "main" java.lang.AssertionError: Arguments expected.
        at AssertDemo.main(AssertDemo.java:5)
注意:這隻是一個樣本程式,有些情況並不適合使用斷言。事實上,該樣本就是不適合使用斷言的例子

三、適當地使用斷言

雖然能夠用try/catch來捕獲Assertion拋出的異常,但決不能這樣做。另外:

1,不要使用斷言驗證公用方法的參數,因為assert語句不能確保被執行,所以公用方法的任何約束應該由方法自己強制執行。
2,不要使用斷言驗證命令列參數,與前面一條規則類似,參數的驗證應該由程式自己來執行。
3,不要使用可能產生副作用的斷言運算式。

四、參考文獻
[1]Programming With Assertions, Sun Java Documentation, http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html
[2]SCJP學習指南,Kathy sierra & Bert Bates,人民郵電出版社

http://hi.baidu.com/fwso/blog/item/6f4d8802acbe7a0b4bfb51b7.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.