名詞解釋之a(chǎn)ssert【轉(zhuǎn)載】

          java assert的用法

          assert 是在 J2SE1.4 中引入的新特性, assertion 就是在代碼中包括的布爾型狀態(tài),程序員認(rèn)為這個狀態(tài)是 true 。一般來說 assert 在開發(fā)的時候是檢查程序的安全性的,在發(fā)布的時候通常都不使用 assert 。在 1.4 中添加了 assert 關(guān)鍵字和 java.lang.AssertError 類的支持。

                首先,我們有必要從一個例子說起 assert

          public class AssertTest

          {

           public static void main(String[] args)

           {

           AssertTest at = new AssertTest();

           at.assertMe(true);

           at.assertMe(false);

            

           }

           

           private void assertMe(boolean boo)

           {

           assert boo?true:false;

           System.out.println(true condition);

           }

           

          }

          程序中包含了 assert 的話,你要用 javac -source 1.4 xxx.java 來編譯,否則編譯器會報錯的。要想讓 assert 得部分運行的話,要使用 java -ea xxx 來運行,否則包含 assert 得行會被忽略。下面我們運行

          javac -source 1.4 AssertTest.java

          java -ea AssertTest

          看看結(jié)果的輸出是:

          true condition

          Exception in thread main java.lang.AssertionError

                  at AssertTest.assertMe(AssertTest.java:13)

                  at AssertTest.main(AssertTest.java:7)

          當(dāng)我們運行 at.assertMe(true) 得時候,由于 assert boo?true:false 相當(dāng)于 assert true; 因此沒有任何問題,程序往下執(zhí)行打印出 true condition ,但是執(zhí)行 at.assertMe(false) 的時候相當(dāng)于 assert false ,這個時候解釋器就會拋出 AssertionError 了,程序就終止了。大家必須清楚 AssertionError 是繼承自 Error 得,因此你可以不再程序中 catch 它的,當(dāng)然你也可以在程序中 catch 它然后程序可以繼續(xù)執(zhí)行。例如:

          public class AssertTest

          {

           public static void main(String[] args)

           {

           AssertTest at = new AssertTest();

           try

           {

             at.assertMe(true);

             at.assertMe(false);

           }

           catch(AssertionError ae)

           {

             System.out.println(AsseriontError catched);

           }

           System.out.println(go on);

            

           }

           

           private void assertMe(boolean boo)

           {

           assert boo?true:false;

           System.out.println(true condition);

           }

           

          }

              assert 還有另外一種表達(dá)的方式,就是 assert exp1:exp2; 其中 exp1 是個 boolean 返回值得表達(dá)式,而 exp2 可以是原始的數(shù)據(jù)類型或者對象都可以例如:

             boolean boo = true;

             String str = null;

              assert boo = false str=error;

          我們剛開始講得 assert exp1 得形式,當(dāng) exp1 false 得時候, AssertionError 得默認(rèn)構(gòu)造器會被調(diào)用,但是 assert exp1:exp2 這樣的形式,當(dāng) exp1 true 的時候后面 exp2 被或略,如果 false 的話,后面的表達(dá)式的結(jié)果會被計算出來并作為 AssertionError 得構(gòu)造器參數(shù)。看下面的例子:

          public class AssertTest

          {

           public static void main(String[] args)

           {

           AssertTest at = new AssertTest();

           at.assertMe(true);

           at.assertMe(false);

            

           }

           

           private void assertMe(boolean boo)

           {

           String s = null;

           assert boo?true:false:s = hello world;

           System.out.println(true condition);

           }

           

          } 運行的時候會得到這樣的結(jié)果

          true condition

          Exception in thread main java.lang.AssertionError: hello world

                  at AssertTest.assertMe(AssertTest.java:14)

                  at AssertTest.main(AssertTest.java:7)

          Assert 最好不要濫用,原因是 assert 并不一定都是 enable 的,下面兩種情況就不應(yīng)該用 assert

          1 不要再 public 的方法里面檢查參數(shù)是不是為 null 之類的操作

          例如 public int get(String s)

             {

                 assert s != null;

             }

          如果需要檢查也最好通過 if s = null 拋出 NullPointerException 來檢查

          2 不要用 assert 來檢查方法操作的返回值來判斷方法操作的結(jié)果   

          例如 assert list.removeAll(); 這樣看起來好像沒有問題 但是想想如果 assert disable 呢,那樣他就不會被執(zhí)行了 所以 removeAll() 操作就沒有被執(zhí)行  可以這樣代替
          boolean boo = list.removeAl();

          assert boo;

          posted on 2008-12-30 00:04 DHC 閱讀(315) 評論(0)  編輯  收藏 所屬分類: java基礎(chǔ)


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


          網(wǎng)站導(dǎo)航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          公告

          THE TRUTH IS OUT THERE.
          本博客純屬摘錄
          若有雷同
          實屬正常
          只為記錄
          不為其它
          望原創(chuàng)作者見諒

          常用鏈接

          留言簿

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 油尖旺区| 隆尧县| 高陵县| 青海省| 台北县| 南安市| 芷江| 桑日县| 九台市| 上蔡县| 巩留县| 涞水县| 富阳市| 佳木斯市| 巩义市| 辉县市| 云和县| 二连浩特市| 自治县| 石柱| 玉屏| 通许县| 苏尼特右旗| 惠安县| 晋州市| 什邡市| 临猗县| 衡阳县| 托克托县| 仁布县| 阿鲁科尔沁旗| 永寿县| 永定县| 小金县| 余姚市| 垦利县| 湄潭县| 拉萨市| 时尚| 临猗县| 冀州市|