斷言學習

前言

? ? 最近看項目代碼,發現里面有大量的斷言。已經看不懂了,偷偷百度學習一下。

?百度搜索 斷言:斷言表示為一些布爾表達式,程序員相信在程序中的某個特定點該表達式值為真,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言。同樣,程序投入運行后,最終用戶在遇到問題時可以重新啟用斷言。


有點拗口,個人覺得 斷言就是在程序員在程序運行前,預估某個變量的值。如果程序在運行時預估值與實際值不相等,則拋出異常提示。那么斷言實際上主要是應用在程序調試上(雖然網上很多文章說 在生產上關閉斷言是把孩子和洗澡水一起倒掉了)。

動手測試一下 增強記憶。

測試--未開啟斷言

代碼:

public class AssertExample {

public static void main(String args[]) {

int x = 1;

System.out.println("Testing Assertion start");

assert (x == 2);

System.out.println("Testing Assertion passed!");

}

}

運行結果:

因為未開啟斷言,所以斷言不起作用。

Testing Assertion start

Testing Assertion passed!


測試 啟動斷言

代碼同上,運行時設置運行參數,以Eclipse為例

運行結果:

當數值與預估不一直時報出異常:

Exception in thread "main" java.lang.AssertionError?

at assertTest.AssertExample.main(AssertExample.java:7)

Testing Assertion start


測試 正確預測

代碼:

public class AssertExample {

public static void main(String args[]) {

? ? ?int x = 1;

? ? System.out.println("Testing Assertion start");

? ? assert (x == 1);

? ? System.out.println("Testing Assertion passed!");

? }

}

運行結果:

Testing Assertion start

Testing Assertion passed!

測試 ?主動報出異常信息

代碼:

public class AssertExample {

public static void main(String args[]) {

int x = 1;

System.out.println("Testing Assertion start");

assert x == 2 :"x is error";

System.out.println("Testing Assertion passed!");

}

}

運行結果:

Testing Assertion start

Exception in thread "main" java.lang.AssertionError: x is error

at assertTest.AssertExample.main(AssertExample.java:7)


后記

? ?1.斷言尤其適合在一些循環的調試中,當循環值或者變量發送變化后,進行調試。

? ? 2.代碼中一些常用的字符合法性檢查可以交由斷言來實現

public static void assertObjectNotNull(String fieldName, Object fieldValue) {

/* if (fieldValue == null) {

throw new IllegalArgumentException(String.format("[%s]不能為空。", fieldName));

}*/

assert(null!=fieldValue):fieldName+"字段不能為空";

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 斷言概述 編寫代碼時,我們總是會做出一些假設,斷言就是用于在代碼中捕捉這些假設 可以將斷言看作是異常處理的一種高級...
    Zcclucky閱讀 2,310評論 0 1
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機制的簡單原理和應用。 當JAVA程序違反了JA...
    八爺君閱讀 4,670評論 1 114
  • DAY 05 1、 public classArrayDemo { public static void mai...
    周書達閱讀 751評論 0 0
  • 1 順序語句 語句:使用分號分隔的代碼稱作為一個語句。 注意:沒有寫任何代碼只是一個分號的時候,也是一條語句,...
    哈哈哎呦喂閱讀 408評論 0 0
  • 第四天 數組【悟空教程】 第04天 Java基礎 第1章數組 1.1數組概念 軟件的基本功能是處理數據,而在處理數...
    Java幫幫閱讀 1,614評論 0 9