java斷言機制(assert)

概述

斷言使用的時候不是很多,測試時會使用,總的來說斷言還是要慎重。在C和C++語言中都有assert關鍵,表示斷言。在Java中,同樣也有assert關鍵字,表示斷言,用法和含義都差不多。在Java中,assert關鍵字是從JAVA SE 1.4 引入的,爲了避免和老版本的Java代碼中使用了assert關鍵字導致錯誤,Java在執行的時候默認是不啓動斷言檢查的(這個時候,所有的斷言語句都將忽略!),如果要開啓斷言檢查,則需要用開關-enableassertions或-ea來開啓。

語法

//1、assert <boolean>表達式
	assert Expression1 ;
//如果<boolean表達式>爲true,則程序繼續執行。
//如果爲false,則程序拋出AssertionError,並終止執行。


//2、assert <boolean> : <錯誤信息表達式>
	assert Expression1 : Expression2 ;
//如果<boolean表達式>爲true,則程序繼續執行。
//如果爲false,則程序拋出java.lang.AssertionError,並輸入<錯誤信息表達式>。

斷言使用場景

  1. 變量值明確
    變量值如果很確定是某個值,則可以用斷言。
  2. 執行不到的語句
    某個地方語句確定是執行不會達到的,例如沒有default的switch,則default可加上斷言。
  3. 前置條件
    前置條件(precondition)是一條語句,在方法執行前必須爲真。
  4. 後置條件
    後置條件(postcondition)是一條語句,當前置條件滿足且完全執行方法後,它爲真
  5. 檢查類的狀態
    加一個內部方法,返回布爾值,當檢查類狀態正常時返回true。

不要用斷言場景

  1. 不要用斷言做參數檢查
    因爲無論斷言是啓用還是禁用,都必須進行參數檢查的,而斷言是可能被禁用的。並且斷言報出的AssertionError異常,不能準確反饋運行時異常(例如IllegalArgumentException,IndexOutOfBoundsException或NullPointerException)。
  2. 不要用斷言來完成程序正確操作所需的任何工作
    例如,假設你想要從列表名稱中刪除所有空元素,並且知道該列表包含一個或多個空值。

錯誤的做法:

 //行爲包含在斷言中
assert names.remove(null);

當斷言被啓用時,程序會正常工作,但在禁用時會失敗,因爲它不再從列表中刪除空元素。

正確的用法:

//固定 - 動作先於斷言
boolean nullsRemoved = names.remove(null);
assert nullsRemoved; //運行是否啓用斷言
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章