斷言學(xué)習(xí)

前言

? ? 最近看項目代碼,發(fā)現(xiàn)里面有大量的斷言。已經(jīng)看不懂了,偷偷百度學(xué)習(xí)一下。

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


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

動手測試一下 增強(qiáng)記憶。

測試--未開啟斷言

代碼:

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!");

}

}

運(yùn)行結(jié)果:

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

Testing Assertion start

Testing Assertion passed!


測試 啟動斷言

代碼同上,運(yùn)行時設(shè)置運(yùn)行參數(shù),以Eclipse為例

運(yùn)行結(jié)果:

當(dāng)數(shù)值與預(yù)估不一直時報出異常:

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

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

Testing Assertion start


測試 正確預(yù)測

代碼:

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!");

? }

}

運(yùn)行結(jié)果:

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!");

}

}

運(yùn)行結(jié)果:

Testing Assertion start

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

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


后記

? ?1.斷言尤其適合在一些循環(huán)的調(diào)試中,當(dāng)循環(huán)值或者變量發(fā)送變化后,進(jìn)行調(diào)試。

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

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

/* if (fieldValue == null) {

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

}*/

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

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容