java基礎:斷言assert


核心思想

{P}S{Q}表示程序的正確性斷言.

S表示程序代碼段,P(前置斷言)和Q(後置斷言)分別是S執行前後應該滿足的斷言。

P(前置斷言)刻畫了程序執行前應該滿足的條件;

Q(後置斷言)刻畫了程序執行後應該滿足的條件。

斷言{P}S{Q}的含義:

如果滿足P爲真則S必定在有限步驟內終止,且終止時Q必定爲真。

應用於計算機語言

Assertion(斷言)功能在J2SE 1.4版本時引入的,是一種爲方便調試而引入的語法機制(也可以說就是一種調試機制)。assertJ2SE1.4開始被作爲關鍵字保留。

爲什麼需要斷言

這裏你可能會問:我們不是有調試方法嗎(在eclipse中設置斷點追蹤變量),爲什麼需要斷言來方便調試呢?

你想一下:你開發了一款產品(假設產品中代碼分爲 B C兩段),過了一段時間後客戶跟你講有bug需要你進行維護,你發現需要修改C段的代碼,但是你能確定修改了C段後不會影響B段的代碼運行結果嗎,按照我們以前的測試方式的話你就只有把B段也進行測試吧;好,就算要把B段按照以前的輸出語句或斷點和邏輯判斷來從新測試,可是這些信息沒有保存呀,隔了這麼久了你也可能忘了,這是不是一件相當麻煩的事。而assertion(斷言)就可以比較好的解決這個問題。

語法形式(兩種)

assert bool_expression1;

// bool_expression1爲邏輯表達式,結果只能爲true;若爲false,將拋出AssertionError異常。

assert  bool_expression1: expression2;

// bool_expression1結果爲false拋出異常並且把expression的結果轉化爲String類型打印出來

運行

在運行時,我們可以選擇開啓assertion功能,或者不開啓,另外我們還可以開啓一部分類或包的assertion功能,所以運行選項變得有些複雜。

Java  -ea  Test.class      // [-ea]參數:啓動斷言(執行時纔會去檢測斷言的真假)

Java  -da  Test.class             //  [-da]參數:關閉斷言(執行時忽略斷言語句)

 

參考:

歐陽晨和周欣寫的深入解析Java的新特性assertion

華志章老師的《Java語言程序設計》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章