assert(断言)关键字
一:assert关键字介绍
Java在JDK1.4时加入了assert(断言)关键字,一般开发中很少用到;
assert有两种用法:
(1)asset booleanValue;
这里booleanValue是一个必须为真(true)或者假(false)的表达式。如果表达式的结果为true,那么断言为真,并且无任何行动;
如果表达式为false,则断言失败,则会抛出一个AssertionError对象。这个AssertionError继承于Error对象,
而Error继承于Throwable,Error是和Exception并列的一个错误对象,通常用于表达系统级运行错误。
(2)asset condition : stringValse;
这里condition是和上面一样的,这个冒号后跟的是一个表达式,通常用于断言失败后的提示信息,说白了,它是一个传到AssertionError构造函数的值,如果断言失败,该值被转化为它对应的字符串,并显示出来。
二:如何在Ecplice环境中使assert生效
1:必须要是JDK1.4之后版本;
同时,将
"Use Default Compiler Settings"前的勾去掉。并将下面的
"Generated .class file compatibility"和"Sourcecompatibility"均选择为1.4以上,才能正确编译。
2:Ecplice设置JVM启动参数:assert有效:
在Arguments页面中的"VM Arguments" 中填入-ea或者-enableassertions选项。才能让断言在运行时起作用。
上图是配置RUN模式的,如果想DEBUG模式也生效,则下图配置启动信息也需要加-ea参数(默认是-da 不生效):
配置完成之后运行如图:
第一种方式异常:
第二种方式异常:(自定义异常信息)
三:指定某些路径断言有效无效配置
当执行代码时,使用-ea选项使断言有效,也可以使用-da选项使断言无效(默认为无效)
同样,也可以通过在-ea或-da后面指定包名来使一个包的断言有效或无效。例如,要使一个com.test包中的断言
无效,可以使用:
-da:com.test
要使一个包中的所有子包中的断言能够有效或无效,在包名后加上三个点。例如:
-ea:com.test...
即可使com.test包及其子包中的断言无效。
四:assert进阶
因为在运行时默认是关闭assert的,因为开启assert校验,也会损耗一定的性能,并且如果在关键部分的校验使用了assert验证,但是忘记开启assert功能,那么肯定会造成重大的失误,所以在生产环境下的代码,是不建议使用assert功能的,一般都是在测试类里面使用的比较多。
那么,既然没法在生产环境中使用assert功能,那么有没有替代的assert的组件?
答案是肯定的,这里面分几种情况:
(1)在spring环境中,可以直接使用工具类Assert:
Assert.notNull(obj, "object was null");
(2)如果不在spring中,在普通的Java项目中可以使用jdk7中自带的Objects工具类:
Objects.requireNonNull()
(3)如果觉得Objects工具类功能较弱,可以引入junit工具类里面的Assert类:
Assert.assertNotNull();
本文主要介绍了Java中assert关键字的功能和其用法,虽然assert关键字使用起来比较方便,但是由于其自身的缺点,所以不推荐在生产环境中使用,不过我们使用其他的替代方案来完成同样的功能,这一点需要注意。