java中Assert的用法
2016-09-07 15:41
429 查看
assert是在J2SE1.4中引入的新特性,assertion就是在代码中包括的布尔型状态,程序员认为这个状态是true。一般来说assert在开发的时候是检查程序的安全性的,在发布的时候通常都不使用assert。在1.4中添加了assert关键字和j
assert是在J2SE1.4中引入的新特性,assertion就是在代码中包括的布尔型状态,程序员认为这个状态是true。一般来说assert在开发的时候是检查程序的安全性的,在发布的时候通常都不使用assert。在1.4中添加了assert关键字和java.lang.AssertError类的支持。 首先,我们有必要从一个例子说起assert public class AssertTest { public static void main(String[] args) { AssertTest at = new AssertTest(); at.assertMe(true); at.assertMe(false); } private void assertMe(boolean boo) { assert boo?true:false; System.out.println("true condition"); } } 程序中包含了assert的话,你要用javac -source 1.4 xxx.java来编译,否则编译器会报错的。要想让assert得部分运行的话,要使用java -ea xxx来运行,否则包含assert得行会被忽略。下面我们运行 javac -source 1.4 AssertTest.java java -ea AssertTest 看看结果的输出是: true condition Exception in thread "main" java.lang.AssertionError at AssertTest.assertMe(AssertTest.java:13) at AssertTest.main(AssertTest.java:7) 当我们运行at.assertMe(true)得时候,由于assert boo?true:false相当于 assert true;因此没有任何问题,程序往下执行打印出true condition,但是执行at.assertMe(false)的时候相当于assert false,这个时候解释器就会抛出AssertionError了,程序就终止了。大家必须清楚AssertionError是继承自Error得,因此你可以不再程序中catch它的,当然你也可以在程序中catch它然后程序可以继续执行。例如: public class AssertTest { public static void main(String[] args) { AssertTest at = new AssertTest(); try { at.assertMe(true); at.assertMe(false); } catch(AssertionError ae) { System.out.println("AsseriontError catched"); } System.out.println("go on"); } private void assertMe(boolean boo) { assert boo?true:false; System.out.println("true condition"); } } assert还有另外一种表达的方式,就是assert exp1:exp2;其中exp1是个boolean返回值得表达式,而exp2可以是原始的数据类型或者对象都可以例如: boolean boo = true; String str = null; assert boo = false:str="error"; 我们刚开始讲得assert exp1得形式,当exp1是false得时候,AssertionError得默认构造器会被调用,但是assert exp1:exp2这样的形式,当exp1为true的时候后面exp2被或略,如果false的话,后面的表达式的结果会被计算出来并作为AssertionError得构造器参数。看下面的例子: public class AssertTest { public static void main(String[] args) { AssertTest at = new AssertTest(); at.assertMe(true); at.assertMe(false); } private void assertMe(boolean boo) { String s = null; assert boo?true:false:s = "hello world"; System.out.println("true condition"); } }运行的时候会得到这样的结果 true condition Exception in thread "main" java.lang.AssertionError: hello world at AssertTest.assertMe(AssertTest.java:14) at AssertTest.main(AssertTest.java:7) Assert最好不要滥用,原因是assert并不一定都是enable的,下面两种情况就不应该用assert 不要再public的方法里面检查参数是不是为null之类的操作 例如public int get(String s) { assert s != null; } 如果需要检查也最好通过if s = null 抛出NullPointerException来检查 不要用assert来检查方法操作的返回值来判断方法操作的结果 例如 assert list.removeAll();这样看起来好像没有问题 但是想想如果assert 被disable呢,那样他就不会被执行了 所以removeAll()操作就没有被执行 可以这样代替 boolean boo = list.removeAl(); assert boo; eclipse 中怎样设置 参数来 使用 Asset 依次进入eclipse的菜单项Window -> Preferences -> Java -> Compiler -> Compliance and Classfiles 将Compiler Compliance Level to 5.0. 断言在java的JDK1.4版本中添加进来,这个设置告诉编译器识别和允许断言语句,但是还没有开启断言。 接下来,进入菜单项Window -> Preferences -> Java -> Compiler -> Compliance and Classfiles,并且设置: Compiler Compliance Level: 5.0 Use default compliance settings unchecked Generated .class files compatibility: 5.0 Source compatibility: 5.0 Disallow identifiers called 'assert': Error Compiler Compliance Level to 5.0 选择开启或关闭Assert功能 由于我们可以选择开启assertion功能,或者不开启,另外我们还可以开启一部分类或包的assertion功能,所以运行选项变得有些复杂。通过这些选项,我们可以过滤所有我们不关心的类,只选择我们关心的类或包来观察。下面介绍两类参数:
|
相关文章推荐
- Java中assert的用法『转』
- java中Assert的用法
- java assert的用法简介
- java assert的用法简介【转】
- java源码中assert的基本用法
- Java中的assert用法
- java assert的用法
- Java Assert 用法简介
- 介绍Java中的assert用法
- java中Assert的用法
- java assert的用法
- Java中assert的用法
- java中assert的用法理解
- Java中的assert用法
- java中assert的用法理解
- 介绍Java中的assert用法
- java assert断言的用法
- java assert 用法
- java assert 用法介绍
- Java中的assert用法