关于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功能的,一般都是在测试类里面使用的比较多。
所以也不是很常用,了解一下说不定以后会用到。
关于LAB2中的assert的更多相关文章
- junit4 assert类中的assert方法总结
junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类. 1.assertTrue/False([String message,]boolean cond ...
- junit中的assert方法总结
junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类.1.assertTrue/False([String message,]boolean condi ...
- 集成电路中的assert和deassert应该如何翻译?
转载自:http://m.blog.csdn.net/blog/code_robot/37663085 我每次看到电路中的assert与deassert时,总是感觉别扭,因为词典翻译总是"断 ...
- junit4 assert类中的assert方法总结
junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类. 1.assertTrue/False([String message,]boolean cond ...
- java中的assert
Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在J ...
- C语言中断言ASSERT
我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错". 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种&qu ...
- 多线程中遇到ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);怎么解决
XP下用VC开发的程序,在一个主线程调用3 个线程,线程之间要共享数据,结果总出现wincore.cpp line 980 ASSERT(pMap-> LookupPermane ...
- VC中TRACE ASSERT VERIFY之用法
一.TRACE宏 当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了.但在程序的Release版本中,它们是被完全禁止的.下面是一个典 ...
- Delphi 中 断言 Assert 用法
procedure Assert(expr : Boolean [; const msg: string]); 用法: Assert(表达式,[显示信息]); 如果为假, assert会产生一个E ...
- Idea中开启assert断言
先打开相应的配置面板,有以下两种方式. 然后在VM栏里输入 -enableassertions 或者 -ea 就好了 然后编写程序试试 我的目录结构如下:(因为Main class那里要写类的全限 ...
随机推荐
- 字符串类型如何格式化保留小数点后两位【ToString("0.00")】
废话都不想写了,直接上图 遇到将decimal字段或者double字段转换成字符串string类型字段时想直接保留小数点后面两位的时候可以有个比较简易的格式化写法 也就是 str.ToString(& ...
- css样式 div垂直水平居中对齐
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- gitee下载项目
PS:如果直接在gitee仓库中选择下载zip,在本地打开项目后是不会与gitee远程库绑定的.如果要与远程库同步,需要选择克隆,同样的,本地需要先搭建好git环境. 1.在本地新建文件夹 2.在文件 ...
- 虚拟机中Linux分区扩容
打开Virtualbox所在的安装目录,执行以下命令,命令中的虚拟有磁盘路径改成自己的: 调整容量前,先关闭虚拟机.接着,打开CMD,进入VirtualBox的安装目录,执行VBoxManage li ...
- spring security 基于角色的控制,可运行。
基于角色的访问控制 建表语句,见 上一篇 的博文, https://www.cnblogs.com/sdgtxuyong/p/16157870.html 在配置类中,@EnableGlobalMet ...
- CUDA kernel使用printf调试,一定要加cudaDeviceSynchronize
#include <stdio.h> __global__ void print() { printf("Hello from (%d, %d)\n", blockId ...
- apk签名之后安装失败
Android Studio 3.0.1 很奇怪的一个现象,直接run的话可以成功,debug也可以,但是用签名打包之后,却安装失败,原来是打包的时候选错了.原来签名时,Signature Versi ...
- C语言学习---星花与取地址&----以及多级指针
#include<stdio.h> int main { //对一个表达式加* , 就会对表达式减一级星花*, //如果对表达式取&, 就会加一级* int* p; int** q ...
- Visual Studio常用的宏
$(SolutionDir) 表示获取解决方案文件.sln所在文件夹 $(ProjectDir 获取项目工程文件.vcxproj所在文件夹 $(Configuration) 获取编译后的Debug / ...
- 36.Vim笔记
1.简介 $vim [filename] vim有三种操作模式,分别称为编辑模式.插入模式和命令模式 2.编辑模式 vim编辑模式的主要用途是在被编辑的文件中移动光标的位置.一旦光标移动到所要的位置, ...