在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的更多相关文章

  1. junit4 assert类中的assert方法总结

    junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类. 1.assertTrue/False([String message,]boolean cond ...

  2. junit中的assert方法总结

    junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类.1.assertTrue/False([String message,]boolean condi ...

  3. 集成电路中的assert和deassert应该如何翻译?

    转载自:http://m.blog.csdn.net/blog/code_robot/37663085 我每次看到电路中的assert与deassert时,总是感觉别扭,因为词典翻译总是"断 ...

  4. junit4 assert类中的assert方法总结

    junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类. 1.assertTrue/False([String message,]boolean cond ...

  5. java中的assert

    Java陷阱之assert关键字   一.概述   在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多.   二.语法   在J ...

  6. C语言中断言ASSERT

    我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错". 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种&qu ...

  7. 多线程中遇到ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);怎么解决

    XP下用VC开发的程序,在一个主线程调用3   个线程,线程之间要共享数据,结果总出现wincore.cpp   line   980   ASSERT(pMap-> LookupPermane ...

  8. VC中TRACE ASSERT VERIFY之用法

    一.TRACE宏     当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了.但在程序的Release版本中,它们是被完全禁止的.下面是一个典 ...

  9. Delphi 中 断言 Assert 用法

    procedure Assert(expr : Boolean [; const msg: string]); 用法:   Assert(表达式,[显示信息]); 如果为假, assert会产生一个E ...

  10. Idea中开启assert断言

    先打开相应的配置面板,有以下两种方式.   然后在VM栏里输入 -enableassertions 或者 -ea 就好了 然后编写程序试试 我的目录结构如下:(因为Main class那里要写类的全限 ...

随机推荐

  1. MyBatis_02_(搭建Mybatis)

    搭建MyBatis 1-开发环境 2-创建Maven工程 2.1- 打包方式 2.2 导入依赖 <!-- 打包方式jar--> <packaging>jar</packa ...

  2. 查找大文件-清理linux磁盘

    https://www.cnblogs.com/kerrycode/p/4391859.html find . -type f -size +800M  -print0 | xargs -0 du - ...

  3. firefox 安装旧版flash播放器

    国内恶心的特供版flash用是不可能在用了,用旧版的火狐和旧版的flash播放器,亲测可用. 下载旧版本的火狐浏览器67.04 https://ftp.mozilla.org/pub/firefox/ ...

  4. revit卸载工具,完全彻底卸载删除干净revit各种残留注册表和文件的方法和步骤。

    revit卸载工具,完全彻底卸载删除干净revit各种残留注册表和文件的方法和步骤.如何卸载revit呢?有很多同学想把revit卸载后重新安装,但是发现revit安装到一半就失败了或者显示revit ...

  5. 使用MVC编程模型通过flask蓝图实现前端后台新闻发布系统

    相关知识点: flask:是Python开发轻量级框架,也能很好的开发动态网站. 蓝图:flask中蓝图能很好的实现代码分割管理,从而不使代码全部放在app.py杂乱无章,蓝图就像动物管理员一样,把猫 ...

  6. ACCESS中查询语句:查询所得数据另存到一个指定目录下的文件夹里,并新建新的文件

    select * into [excel 8.0 database=d:\aa.xls].sheet1 from bb where bb.cc="dd" excel 8.0 为什么 ...

  7. qgis中的时间格式化函数

    为方便自己查询,尤其是年月日等在不同编程语言直接的差异,就从官方doc中截图放这

  8. [*]Is L2 Physics-Informed Loss Always Suitable for Training Physics-Informed Neural Network?

    NeurIPS 2022 本篇工作对PINN中的物理损失进行了探究,作者认为L2损失并不总是适用于训练PINN.并从PDE解的稳定性角度给出了理论性的说明.读了这篇文章,感觉自己的毕业论文做的十分浅显 ...

  9. 编译内核出现错误cc1: error: code model kernel does not support PIC mode

    删除该模块目录下的 .cache.mk 文件就好了,重新 make 即可

  10. HTML图片上传实时预览js

    <style>*{margin:0; padding:0;}form{background:#F1F1F1;}.bbg{background:url(../images/add_ico.j ...