assert的基本用法


assertion(斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制,如C,C++和Eiffel等,但是支持的形式不盡相同,有的是通過語言本身、有的是通過庫函數等。另外,從理論上來說,通過assertion方式可以證明程序的正確性,但是這是一項相當復雜的工作,目前還沒有太多的實踐意義。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告並且退出。一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟件發布后,assertion檢查通常是關閉的。下面簡單介紹一下Java中assertion的實現。在語法上,為了支持assertion,Java增加了一個關鍵字assert。它包括兩種表達式,分別如下:

1. assert expression1;

2. assert expression1: expression2;

 

expression1表示一個boolean表達式,expression2表示一個基本類型、表達式或者是一個Object,用於在失敗時輸出錯誤信息。在運行時,如果關閉了assertion功能,這些語句將不起任何作用。如果打開了assertion功能,那么expression1的值將被計算,如果它的值為false,該語句強拋出一個AssertionError對象。

示例代碼如下:

package com.chzhao.test;

public class AssertDemo {

public static void main(String[] args) {

test1(-5);
test2(-3);
}

private static void test1(int a){
assert a > 0;
System.out.println(a);
}
private static void test2(int a){
assert a > 0 : "something goes wrong here, a cannot be less than 0";
System.out.println(a);
}
}

 

eclipse的相關設置

在eclipse中,必須開啟相關設置。具體在偏好設置,選擇Installed JREs,選擇相關版本,點擊edit,在Default VM arguments里面輸入-ea就可以了。

 

assert關鍵字用法簡單,但是使用assert往往會讓你陷入越來越深的陷阱中。應避免使用。總結了以下原因:
 
1、assert關鍵字需要在運行時候顯式開啟才能生效,否則你的斷言就沒有任何意義。而現在主流的Java IDE工具默認都沒有開啟-ea斷言檢查功能。這就意味着你如果使用IDE工具編碼,調試運行時候會有一定的麻煩。並且,對於Java Web應用,程序代碼都是部署在容器里面,你沒法直接去控制程序的運行,如果一定要開啟-ea的開關,則需要更改Web容器的運行配置參數。這對程序的移植和部署都帶來很大的不便。
 
2、用assert代替if是陷阱之二。assert的判斷和if語句差不多,但兩者的作用有着本質的區別:assert關鍵字本意上是為測試調試程序時使用的,但如果不小心用assert來控制了程序的業務流程,那在測試調試結束后去掉assert關鍵字就意味着修改了程序的正常的邏輯。
 
3、assert斷言失敗將面臨程序的退出。這在一個生產環境下的應用是絕不能容忍的。一般都是通過異常處理來解決程序中潛在的錯誤。但是使用斷言就很危險,一旦失敗系統就掛了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM