断言的介绍(assert)
2016-08-21 22:42
267 查看
断言
假设要进行如下的计算:
double y = Math.sqrt(x);
为了让程序健壮,你会先进行测试检查并抛出异常而不让x的值为负数。
if(x<0) throw new IllealArgumentException("x < 0");
但是,就算是测试结束了,以后实际运行时x的值不会小于0。这种测试代码会一直保留在你的程序中。如果程序中有太多的检查,程序的运行就会慢好多。
如果在测试阶段会有这种检查,而在发布阶段能自动删除这些东西。该多好! 这就是断言机制。
1. 断言使用
在JDK1.4中,Java语言引入一个新的关键字: assert。 该关键字有两种形式:
assert 条件
以及
assert 条件: 表达式
这两种形式都会对条件进行评估,如果结果为假则抛出AssertionError。 在第二种形式中,表达式会传入AssertionError的构造器并转成一个消息字符串。
表达式部分的唯一目的就是生成一个消息字符串。AssertionError对象并不存储表达式的值,因此你不可能在以后获取它。
要断言x不是负数,只需要使用如下简单的语句:
assert x >= 0;
或者你可以将x的值传递给AssertionError对象,从而可以在以后显示:
assert x >= 0 : x;
2. 断言内容代码编译
因为assert是一个新的关键字,因此在使用时需要告诉编译器你编译所使用jdk的版本号。
javac -source 1.4 MyClass.java
在jdk的后续版本中,对断言的支持成为默认特性(我们使用的是JDK7.0,使用不需要使用这个编译,默认就支持的)。
3. 断言内容代码执行
默认情况下,断言是关闭的。要通过-enableassertions或者-ea选项来运行程序以打开断言:
java -enableassertions com.sample.MyApp
java -cp bin -ea com.sample.MyApp
打开或关闭断言是类装载器的功能。当断言功能被关闭时,类装载器会跳过那些和断言相关的代码,因此不会降低程序运行速度。
参见异常处理:http://blog.csdn.net/suwu150/article/details/51311780
假设要进行如下的计算:
double y = Math.sqrt(x);
为了让程序健壮,你会先进行测试检查并抛出异常而不让x的值为负数。
if(x<0) throw new IllealArgumentException("x < 0");
但是,就算是测试结束了,以后实际运行时x的值不会小于0。这种测试代码会一直保留在你的程序中。如果程序中有太多的检查,程序的运行就会慢好多。
如果在测试阶段会有这种检查,而在发布阶段能自动删除这些东西。该多好! 这就是断言机制。
1. 断言使用
在JDK1.4中,Java语言引入一个新的关键字: assert。 该关键字有两种形式:
assert 条件
以及
assert 条件: 表达式
这两种形式都会对条件进行评估,如果结果为假则抛出AssertionError。 在第二种形式中,表达式会传入AssertionError的构造器并转成一个消息字符串。
表达式部分的唯一目的就是生成一个消息字符串。AssertionError对象并不存储表达式的值,因此你不可能在以后获取它。
要断言x不是负数,只需要使用如下简单的语句:
assert x >= 0;
或者你可以将x的值传递给AssertionError对象,从而可以在以后显示:
assert x >= 0 : x;
2. 断言内容代码编译
因为assert是一个新的关键字,因此在使用时需要告诉编译器你编译所使用jdk的版本号。
javac -source 1.4 MyClass.java
在jdk的后续版本中,对断言的支持成为默认特性(我们使用的是JDK7.0,使用不需要使用这个编译,默认就支持的)。
3. 断言内容代码执行
默认情况下,断言是关闭的。要通过-enableassertions或者-ea选项来运行程序以打开断言:
java -enableassertions com.sample.MyApp
java -cp bin -ea com.sample.MyApp
打开或关闭断言是类装载器的功能。当断言功能被关闭时,类装载器会跳过那些和断言相关的代码,因此不会降低程序运行速度。
参见异常处理:http://blog.csdn.net/suwu150/article/details/51311780
相关文章推荐
- JavaScript的对象值比较
- 2016 Multi-University Training Contest 1
- C/C++面试知识点总结
- 4种字母组合方式,玩转logo设计
- 算法备忘录——查找
- 单例模式破解之反射和反序列化
- EJB中的AOP:拦截器
- java如何连接数据库并操作
- 64. magento enable error report
- Python 之 线程与进程
- 程序员基本素质
- PC获取VLAN报文(转)
- 隐藏Linux版本信息显示
- 用户类热门排行榜特效
- xtrabackup备份与恢复实践
- myeclipse快捷键
- 树形dp总结
- 详解Android中AsyncTask的使用
- Java中线程的三种实现方式
- 11种常用设计模式之工厂模式