Java中assert(斷言)的使用


定義和特點:
java斷言assert是jdk1.4引入的。assert這個關鍵字我們稱之為“斷言”。當這個關鍵字后邊的條件為假的時候,程序自動崩潰並拋出AssertionError的異常。當這個關鍵字后面的條件為真的時候,程序繼續執行下一句語句。
 
意義:
什么情況下我們會需要這樣的代碼呢?當我們在測試程序的時候就很好用,因為與其讓錯誤的條件導致程序今后莫名其妙地崩潰,不如在錯誤條件出現的那一瞬間我們實現“自爆”。
 
作用域:
斷言assert 是僅在Debug 版本起作用的宏。 
程序一般分為Debug 版本和Release 版本,Debug 版本用於內部調試,Release 版本發行給用戶使用。斷言assert 是僅在Debug 版本起作用的宏,它用於檢查“不應該”發生的情況。以下是一個內存復制程序,在運行過程中,如果assert 的參數為假,那么程序就會中止(一般地還會出現提示對話,說明在什么地方引發了assert)。 
assert只有在Debug版本中才有效,如果編譯為Release版本則被忽略。
 
JVM運行參數配置:
jvm斷言默認是關閉的。斷言可以局部開啟的,如:父類禁止斷言,而子類開啟斷言,所以一般說“斷言不具有繼承性”。
-ea java -ea 打開所有用戶類的assertion
-da java -da 關閉所有用戶類的assertion
-ea:<classname> java -ea:MyClass1 打開MyClass1的assertion
-da:<classname> java -da: MyClass1 關閉MyClass1的assertion
-ea:<packagename> java -ea:pkg1 打開pkg1包的assertion
-da:<packagename> java -da:pkg1 關閉pkg1包的assertion
-ea:... java -ea:... 打開缺省包(無名包)的assertion
-da:... java -da:... 關閉缺省包(無名包)的assertion
-ea:<packagename>... java -ea:pkg1... 打開pkg1包和其子包的assertion
-da:<packagename>... java -da:pkg1... 關閉pkg1包和其子包的assertion
-esa java -esa 打開系統類的assertion
-dsa java -dsa 關閉系統類的assertion
綜合使用 java -dsa:MyClass1:pkg1 關閉MyClass1和pkg1包的assertion

 

判斷是否開啟斷言:

1 public static void main(String args[]) {
2         boolean isOpen = false;
3         // 如果開啟了斷言,會將isOpen的值改為true。
4         assert isOpen = true;
5         // 打印是否開啟了斷言。如果為false,則沒有啟用斷言;如果為true,表示已開啟斷言。
6         System.out.println(isOpen);
7 }

 

使用斷言例子:

 1 package com.jklopp.test.iassert;
 2 
 3 
 4 import java.io.File;import java.io.FileInputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 
 8 
 9 public class MyAssert{    
10     public static void main(String[] args) {        
11         readFile("E:\\test\\time2.jpeg");        
12         System.out.println("程序執行完畢");    
13     }   
14 
15 
16     /**     
17      * 讀取文件     
18      * @param readFile 要讀取的文件     
19      */    
20     public static void readFile(String readFile) {        
21         InputStream in = null;        
22         try {            
23             File file = new File(readFile);            
24             in = new FileInputStream(file);        
25         } catch (Exception e) {            
26             e.printStackTrace();        
27         } finally {            
28             try {                
29                 assert in != null; // 如果in為null,直接退出jvm結束程序。                
30                 in.close();            
31             } catch (IOException e) {                
32                 e.printStackTrace();            
33             }        
34         }    
35     }
36 }                 

 

 

 

 

 

 

 


免責聲明!

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



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