一、assertion的語法和語義
J2SE 1.4在語言上提供了一個新特性,就是assertion(斷言)功能,它是該版本在Java語言方面最大的革新。在軟件開發中,assertion是一種經典的調試、測試方式,本文將深入解析assertion功能的使用以及其設計理念,並給出相關的例子 。
assertion(斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制,如C,C++和Eiffel等,但是支持的形式不盡相同,有的是通過語言本身、有的是通過庫函數等。另外,從理論上來說,通過assertion方式可以證明程序的正確性,但是這是一項相當復雜的工作,目前還沒有太多的實踐意義。
在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟件發布後,assertion檢查通常是關閉的。下面簡單介紹一下Java中assertion的實現。
1.語法表示
在語法上,為了支持assertion,Java增加了一個關鍵字assert。它包括兩種表達式,分別如下:
assert expression1;
assert expression1: expression2;
在兩種表達式中,expression1表示一個boolean表達式,expression2表示一個基本類型或者是一個對象(Object) ,基本類型包括boolean,char,double,float,int和long。由於所有類都為Object的子類,因此這個參數可以用於所有對象。
2.語義含義
在運行時,如果關閉了assertion功能,這些語句將不起任何作用。如果打開了assertion功能,那麼expression1的值將被計算,如果它的值為false,該語句強拋出一個AssertionError對象。如果assertion語句包括expression2參數,程序將計算出expression2的結果,然後將這個結果作為AssertionError的構造函數的參數,來創建AssertionError對象,並拋出該對象;如果expression1值為true,expression2將不被計算。
一種特殊情況是,如果在計算表達式時,表達式本身拋出Exception,那麼assert將停止運行,而拋出這個Exception。
3.一些assertion例子
下面是一些Assert的例子。
assert 0 < value;
assert 0 < value:"value="+value;
assert ref != null:"ref doesn't equal null";
assert isBalanced();
3.編譯
由於assert是一個新關鍵字,使
[1] [2] [3] [4] [5] [6] [7] 下一頁