关于LAB2中的assert
在LAB2中,测试类里会看到这样一句话
注释的意思是确保VM参数启用 -ea,这是个新东西,平时也没写过,我们来了解一下。
assert不同于assertEquals这样的函数,是Java中的一个关键字,是jdk1.4中加入的,平时开发中见的很少,不过在一些框架的源码里面的测试类里面,出现过不少它的踪迹。
assert意为断言的意思,这个关键字可以判断布尔值的结果是否和预期的一样,如果一样就正常执行,否则会抛出AssertionError。
assert的作用类似下面的一段代码:
boolean flag=false;
assert flag;
等价于:
if (!flag){
throw new AssertionError();
}
assert还有另外一种用法:
asset expression1 : expression2;
其实后面的表达式是允许我们自定义一个异常错误信息抛出。
比如:
public static void checkName(String name){
assert name!=null:"name is empty";
}
执行一下:
checkName(null);
会看到类似这样的结果:
Exception in thread "main" java.lang.AssertionError: name is empty
at basic.assert_test.DemoAssert.checkName(DemoAssert.java:19)
at basic.assert_test.DemoAssert.main(DemoAssert.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
注意第一行,出现了我们想要的提示信息。
注意,在运行的时候,正常情况下assert是不会生效的,因为运行时assert是关闭的,想要使用,必须在VM启动参数中开启:
-enableassertions 或者 -ea
这个VM启动参数在哪里呢?
在eclipse中,找到上方的window,点击Preferences
在左侧Java中找到Installed JREs
选中要设置VM参数的JRE,点击右侧Edit
在光标处,Default VM arguments出输入VM参数
既然assert能够精简的判断一些case,那么是不是所有的判断都应该使用assert判断呢?
实际上并不是这样,因为在运行时默认是关闭assert的,因为开启assert校验,也会损耗一定的性能,并且如果在关键部分的校验使用了assert验证,但是忘记开启assert功能,那么肯定会造成重大的失误,所以在生产环境下的代码,是不建议使用assert功能的,一般都是在测试类里面使用的比较多。
所以也不是很常用,了解一下说不定以后会用到。
最新文章
- JavaScript自学之数组排序
- BZOJ 4521 手机号码
- Android图片开发内幕--基础篇
- 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)
- 关闭Windows Update更新驱动程序
- ASP.NET MVC2中Controller向View传递数据的三种方式
- cocos2d-x lua 使用ListView
- Android开发之android:process=";:remote";
- 数据分析与展示——NumPy库入门
- Python类的__getitem__和__setitem__特殊方法
- net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第一章 入门篇-开篇及总体规划
- docker 6 docker运行的底层原理
- React 记录(1)
- WebViewJavascriptBridge的使用说明
- AES加解密算法
- DM浅尝辄止
- pyDay7
- DB2开发系列之二——SQL过程
- L235
- arduino远程刷新(烧录)固件