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