定义和特点:
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 }