隨筆-35  評論-97  文章-0  trackbacks-0
           

          1.1.       語法表示

          兩種表達式,分別如下:

          assert expression1;

          assert expression1: expression2;

          1.2.       語義含義

          1.        在運行時,如果關閉了assertion功能,這些語句將不起任何作用。

          2.        如果打開了assertion功能,那么expression1的值將被計算,如果它的值為false,該語句強拋出一個AssertionError對象。如果assertion語句包括expression2參數,程序將計算出expression2的結果,然后將這個結果作為AssertionError的構造函數的參數,來創建AssertionError對象,并拋出該對象;如果expression1值為trueexpression2將不被計算。

          3.        一種特殊情況是,如果在計算表達式時,表達式本身拋出Exception,那么assert將停止運行,而拋出這個Exception

          1.3.       運行

          1.        這種程序必須在JDK1.4(或者更高版本)JRE下運行。

          2.        參數 -esa -dsa
          它們含義為開啟(關閉)系統類assertion功能。 -esa-dsa的全名為-enablesystemassertions-disenablesystemassertions,全名和縮寫名有同樣的功能。

          3.        參數 -ea -ea
          它們含義為開啟(關閉)用戶類的assertion功能。
          -ea
          -da的全名為-enableassertions-disenableassertions,全名和縮寫名有同樣的功能。
          下面表格表示了參數及其含義。

          參數

          例子

          說明

          -ea

          java -ea

          打開所有用戶類的assertion

          -da

          java -da

          關閉所有用戶類的assertion

          -ea:<classname>

          java -ea:MyClass1

          打開MyClass1assertion

          -da:<classname>

          java -da: MyClass1

          關閉MyClass1assertion

          -ea:<packagename>

          java -ea:pkg1

          打開pkg1包的assertion

          -da:<packagename>

          java -da:pkg1

          關閉pkg1包的assertion

          -ea:...

          java -ea:...

          打開缺省包(無名包)assertion

          -da:...

          java -da:...

          關閉缺省包(無名包)assertion

          -ea:<packagename>...

          java -ea:pkg1...

          打開pkg1包和其子包的assertion

          -da:<packagename>...

          java -da:pkg1...

          關閉pkg1包和其子包的assertion

          -esa

          java -esa

          打開系統類的assertion

          -dsa

          java -dsa

          關閉系統類的assertion

          綜合使用

          java -dsa:MyClass1:pkg1

          關閉MyClass1pkg1包的assertion

          其中...代表,此包和其子包的含義。例如我們有兩個包為pkg1pkg1.subpkg。那么pkg1...就代表pkg1pkg1.subpkg兩個包。

           

          1.4.       Assert使用場合

          1.4.1.                適宜使用場合

          1.        使用assert來檢查privateprotected函數中的參數預處理(preconditions)和后處理(postconditions)。

          2.        使用assert來檢查參數或者變量的特殊值,一旦參數或者變量為這些特殊值,則跟這些參數有變量有關的操作不應該出現。

          eg.  

          Object source = event.getSoure();

                 Assert(source 
          != null);

                 …….

                 Int hc 
          = source.hashCode();//一些使用source的代碼

          3.        使用assert來檢查控制流(無效代碼分支)。

          eg.

                 If(source == yesBtn){// do code
                 }

                 
          else If(source == noBtn){// do code
                 }

                 
          else If(source == cancelBtn){// do code
                 }

                 
          else{
                  
          assert false"Invalid Source " +source.toString();
                 }

          4.        使用assert來檢查你的返回值(傳遞條件)。

          Eg.

                

          public Object someMedth(){
                        Object result 
          = null;
                        ……  
          //do some code that sets result
                        Asset(result !=null); // check post condition
                        return result;
          }


          1.4.2.                不適宜使用場合

          1.        不要在public函數中使用assert來驗證參數。

          這些函數應該拋出NullPointerExceptionIllegalArgumentException,或者其他相關的exception

          2.        不要使用assert來檢查軟件用戶的錯誤。應該拋出IllegalArgumentException

          3.        不要使用assert來完成任何工作。如果你使用了assert來完成一些功能,那么assertions一旦被關閉了怎么辦?

          4.        不要無聊地將assert拋出的錯誤消息國際化。一旦assertions關閉,你不是白做工了?

          posted on 2007-05-19 01:42 三告習習 閱讀(634) 評論(0)  編輯  收藏 所屬分類: java/jdk
          主站蜘蛛池模板: 昌江| 麻城市| 如皋市| 浙江省| 韩城市| 嘉定区| 长顺县| 仲巴县| 高邑县| 乌什县| 乌恰县| 莎车县| 来凤县| 乾安县| 两当县| 漳州市| 博乐市| 舒城县| 泾川县| 宁安市| 罗甸县| 额济纳旗| 麻江县| 康保县| 临泉县| 朝阳区| 龙川县| 容城县| 芮城县| 呼玛县| 永嘉县| 靖江市| 资源县| 资兴市| 上蔡县| 舒城县| 溧水县| 台南县| 绿春县| 唐河县| 建宁县|