参考 http://lavasoft.blog.51cto.com/62575/43735/
一、概述
C/C++语言中都有assert关键,表示断言。
在Java中,同样也有assert关键字,表示断言,用法和含义都差不多。
二、简要介绍
Java1.4中新增了一个关键字:assert。注意点如下:
(1)为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启。
(2)assert断言失败,意味着程序会直接崩溃并退出。
三、语法形式
1、assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。
2、assert <boolean表达式> : <错误信息表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。
四、代码实战
public class AssertDemo {
public static void main(String[] args) {
//断言1结果为true,则继续往下执行
assert true;
System.out.println("断言1没有问题,Go!");
System.out.println("\n-----------------\n");
//断言2结果为false,程序终止
assert false : "断言失败,此表达式的信息将会在抛出异常的时候输出!";
System.out.println("断言2没有问题,Go!");
}
}
五、使用方式
记住:无论是Eclipse还是命令行的方式,默认都是没有开启断言的。
1、Eclipse
(1)直接执行程序,默认不会执行断言。
(2)Eclipse开启断言
右键 -> Run As -> Run Configurations... ->Arguments选项卡 -> VM arguments中添加-ea或-enableassertions参数 -> Run -> 会发现打印出断言中的错误了
2、命令行
(1)编译程序
javac AssertDemo.java
(2)执行程序(没有开启-ea开关)
java AssertDemo
(3)执行程序(开启-ea开关)
java -ea AssertDemo
六、建议
assert既然是为了调试测试程序用,不在正式生产环境下用,应该考虑更好的JUint单元测试来代替。因为从上面的例子可以看到assert信息被包含在生成的class文件里面,这样很可能会增大应用程序的体积。
另外注意:使用javac,默认使用的release方式,而我们经常使用的MyEclipse工具,用的是debug模式。
经过试验可以看出:无论是”-g:none”(不生成任何调试信息) 还是 “-nowarn”(不生成任何警告)都不能阻止assert被打包进class。