您的位置:首页 > 其它

断言的介绍(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: