我们知道C/C++语言中有断言的功能(assert)。在Java SE 1.4版本以后也增加了断言的特性。

断言是为了方便调试程序,并不是发布程序的组成部分。理解这一点是很关键的。

默认情况下,JVM是关闭断言的。因此如果想使用断言调试程序,需要手动打开断言功能。在命令行模式下运行Java程序时可增加参数-enableassertions或者-ea打开断言。可通过-disableassertions或者-da关闭断言(默认情况,可有可无)。

断言的使用:

断言是通过关键字assert来定义的,一般的,它有两种形式。

1. assert <bool expression>;       比如     boolean isStudent = false; assert isStudent;

2. assert <bool expression> : <message>;    比如  boolean isSafe = false;  assert isSafe : "Not Safe at all";

光说无用,举几个简单的例子:

第一种形式:


  1. public class AssertionTest {
  2. public static void main(String[] args) {
  3. boolean isSafe = false;
  4. assert isSafe;
  5. System.out.println("断言通过!");
  6. }
  7. }

如果是在命令行模式下运行,需要指明开启断言功能。如

java -ea AssertionTest

如果是在IDE下,比如Eclipse,可这样设置: Run as -> Run Configurations -> Arguments -> VM arguments:敲入-ea即可。

输出结果:

Exception in thread "main" java.lang.AssertionError
at AssertionTest.main(AssertionTest.java:8)

第二种形式:


  1. public class AssertionTest {
  2. public static void main(String[] args) {
  3. boolean isSafe = false;
  4. assert isSafe : "Not safe at all";
  5. System.out.println("断言通过!");
  6. }
  7. }

输出结果:

Exception in thread "main" java.lang.AssertionError: Not safe at all
at AssertionTest.main(AssertionTest.java:7)

第二种形式和第一种的区别在于后者可以指定错误信息。

陷阱:

断言只是为了用来调试程序,切勿将断言写入业务逻辑中。比如考虑下面这个简单的例子:


  1. public class AssertionTest {
  2. public static void main(String[] args) {
  3. assert ( args.length > 0);
  4. System.out.println(args[1]);
  5. }
  6. }

该句assert (args.length >0)和if(args.length >0)意思相近,但是如果在发布程序的时候(一般都不会开启断言),所以该句会被忽视,因此会导致以下

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at AssertionTest.main(AssertionTest.java:7)

更好的替代品:

JUnit。

Java 之 assert (断言)的更多相关文章

  1. Java中assert(断言)的使用

    Java中assert(断言)的使用 1.Eclipse中默认assert(断言)是关闭,开启方式如下: 简单来说:就是设置一下jvm的参数,参数是-enableassertions或者-ea(推荐) ...

  2. 关于java中assert(断言)的使用讲解

    说明:写的不是很全面,有任何问题请留言,多交流,谢谢! 1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enabl ...

  3. Java使用assert断言

    Java1.4后新增assert关键字 Idea中开启assert断言 使用 assert boolean表达式 assert boolean表达式 : 错误提示信息 例子 public static ...

  4. java 中的断言assert的使用

    一.assertion的意义和用法 J2SE 1.4在语言上提供了一个新特性,就是assertion功能,它是该版本在Java语言方面最大的革新. 从理论上来说,通过 assertion方式可以证明程 ...

  5. Java中的断言assert

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

  6. Java中的断言assert的用法

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

  7. Spring Assert 断言

    Assert(断言)的初步理解构思 Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查, ...

  8. Spring Framework 的 Assert断言

    知识共享才能传播,博采众家之长,才能推陈出新!-- 参考 https://www.cnblogs.com/hwaggLee/p/4778101.html 一.什么是 Assert(断言)? Web 应 ...

  9. C++ ASSERT() 断言机制

    C++ ASSERT() 断言机制 ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行.如果表达式不为0,则继 ...

  10. 两张图解读Java异常与断言

    两张图解读Java异常与断言                                 --转载请注明出处:coder-pig 本节引言: 前天公布的"七张图解析Java多线程&quo ...

随机推荐

  1. Vue 学习记录<1>

    1.环境搭建:(前提node.js搭建) # 全局安装 vue-cli $ npm install --global vue-cli   # 创建一个基于 webpack 模板的新项目 $ vue i ...

  2. [React & Testing] Simulate Event testing

    Here we want to test a toggle button component, when the button was click, state should change, styl ...

  3. 3.十分钟读懂——App开发规范的业务流程

    转自:http://www.itdaan.com/blog/2017/12/08/6bc06b3387a8d1238504355a6a1c6743.html 一.主要流程   二.产品立项 工作概述: ...

  4. Android 基于Http的多线程下载的实现

    a.对于网络上的一个资源,首先发送一个请求,从返回的Content-Length中回去需要下载文件的大小,然后根据文件大小创建一个文件. this.fileSize = conn.getContent ...

  5. seaJS注意点:

    1.require 是同步往下执行,require.async 则是异步回调执行.require.async 一般用来加载可延迟异步加载的模块.

  6. 【CS Round #43 C】Rectangle Partition

    [链接]点击打开链接 [题意] 有一辆火车,它的长度为L,然后假设这辆车现在随机可能地出现在0..D之间,然后假设它已经耗光了油. 问你它需要走的期望距离是多少. 这里要走的距离指的是车里最近的加油站 ...

  7. WIN7/8/10下批处理提权工具

    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 自动添加批处 ...

  8. JS实现按下按键触发点击事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. P2P平台很赚钱么?

    最近几年,搞P2P网贷和财富投资相关的金融周边公司,多了很多,楼下门店和电梯里的贷款小广告,真是多啊. 大家都去搞一件事的时候,很可能是大家都觉得这件事有利可图.但事实是,赚钱的总是少数,看到别人搞的 ...

  10. UITextField用法

    .创建 .UITextField* textField = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; .设置委托 //委托类需要遵守 ...