一、概述

在C和C++语言中都有assert关键,表示断言。
在Java中,同样也有assert关键字,表示断言,用法和含义都差不多。

二、语法

在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启。
 
assert关键字语法很简单,有两种用法:
 
1、assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。
 
2、assert <boolean表达式> : <错误信息表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。

三、应用实例

下面给出一个例子,通过例子说明其用法:
 
public class AssertFoo {
    public static void main(String args[]) {
        //断言1结果为true,则继续往下执行
        assert true;
        System.out.println("断言1没有问题,Go!");
 
        System.out.println("\n-----------------\n");
 
        //断言2结果为false,程序终止
        assert false : "断言失败,此表达式的信息将会在抛出异常的时候输出!";
        System.out.println("断言2没有问题,Go!");
    }
}
 
保存代码到C:\AssertFoo.java,然后按照下面的方式执行,查看控制台输出结果:
 
1、编译程序:
C:\>javac AssertFoo.java
 
2、默认执行程序,没有开启-ea开关:
C:\>java AssertFoo
断言1没有问题,Go!
 
-----------------
 
断言2没有问题,Go!
 
3、开启-ea开关,执行程序:
C:\>java -ea AssertFoo
断言1没有问题,Go!
 
-----------------
 
Exception in thread "main" java.lang.AssertionError: 断言失败,此表达式的信息将
会在抛出异常的时候输出!
        at AssertFoo.main(AssertFoo.java:10)

四、陷阱

assert关键字用法简单,但是使用assert往往会让你陷入越来越深的陷阱中。应避免使用。笔者经过研究,总结了以下原因:
 
1、assert关键字需要在运行时候显式开启才能生效,否则你的断言就没有任何意义。而现在主流的Java IDE工具默认都没有开启-ea断言检查功能。这就意味着你如果使用IDE工具编码,调试运行时候会有一定的麻烦。并且,对于Java Web应用,程序代码都是部署在容器里面,你没法直接去控制程序的运行,如果一定要开启-ea的开关,则需要更改Web容器的运行配置参数。这对程序的移植和部署都带来很大的不便。
 
2、用assert代替if是陷阱之二。assert的判断和if语句差不多,但两者的作用有着本质的区别:assert关键字本意上是为测试调试程序时使用的,但如果不小心用assert来控制了程序的业务流程,那在测试调试结束后去掉assert关键字就意味着修改了程序的正常的逻辑。
 
3、assert断言失败将面临程序的退出。这在一个生产环境下的应用是绝不能容忍的。一般都是通过异常处理来解决程序中潜在的错误。但是使用断言就很危险,一旦失败系统就挂了。

五、对assert的思考

assert既然是为了调试测试程序用,不在正式生产环境下用,那应该考虑更好的测试JUint来代替其做用,JUint相对assert关键的所提供的功能是有过之而无不及。当然完全可以通过IDE debug来进行调试测试。在此看来,assert的前途一片昏暗。
 
因此,应当避免在Java中使用assert关键字,除非哪一天Java默认支持开启-ea的开关,这时候可以考虑。对比一下,assert能给你带来多少好处,多少麻烦,这是我们选择是否使用的的原则。

转自   http://tiantian0521.blog.163.com/blog/static/41720883201073025939130/

Java assert关键字相关推荐

  1. java assert语句未执行_Java陷阱之assert关键字

    转自:http://lavasoft.blog.51cto.com/62575/43735/ Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java ...

  2. Java基础の乱弹琴一:assert关键字

    一.概述 assert:表示断言 二.语法 在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默 ...

  3. java assert false_Java陷阱之assert关键字

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

  4. Java assert

    断言 在Java中,与C,C++同样有assert关键字,表示断言,用法和含义都差不多. 用法 assert <boolean表达式> 如果为false,则程序抛出AssertionErr ...

  5. java class 关键字_java关键字及其作用

    一. 关键字总览: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface ...

  6. java的关键字和保留字_Java关键字和保留字及其含义

    1.java的关键字(keyword)有多少个? 51+2个保留字=53个关键字(java的关键字都是小写的!!) 2.java的保留字(reserve word)有多少个?问题:分别是什么? 2个保 ...

  7. java 中关键字_java中关键字一览

    开始学习java了,今天学了java中的关键字,给大家分享以下. java中有50个关键字(含两个保留字),没有算true,false,null,简单一点,列个表格出来,仿照着:abstractcon ...

  8. JAVA基础——关键字与保留字——标识符——进制转换

    本节学习目录 前言 一.JAVA的关键字和保留字 1.什么是Java关键字? 2.什么是Java保留字? 二.JAVA标识符及命名规则 1.标识符 2.命名规则 三.进制的转换 1.何为进制? (1) ...

  9. java outer关键字_Java关键字

    Java关键字 Java关键字是编程语言里事先定义的,有特别意义的单词,Java语言中所有的关键字都是小写的英语单词.Java的关键字对Java的编译器有特殊的意义,它们用来表示一种数据类型,或者表示 ...

最新文章

  1. web api接口开发实例_C# 物联网开发API接口系列(4)
  2. CentOS 7.6 下安装 MySQL8.0.13
  3. Spring WebApplicationContext
  4. mysql数据库参考_干货:MySQL数据库优化参考
  5. 服务器读取excel文件,作为服务器进程读取Excel文件
  6. 关于压缩工具 7z(7-zip) 的选项 -si(从标准输入流读取数据)的解读
  7. MySQL客户端mysql常用命令
  8. 在二元树中查找和为某一值的所有路径
  9. mongodb模糊查询_我叫Mongo,收了「查询基础篇」,值得你拥有
  10. MVC 的八个扩展点
  11. java---键盘输入,写入到本地硬盘的数据
  12. Acwing:最长回文子串
  13. 【美赛】美赛字体格式和排版要求
  14. convert 函数的使用
  15. 有些人二十几岁就提前退休了,凭什么?
  16. 2018-2019-2 20189206 《密码与安全新技术专题》 第六次作业
  17. AS3.0实现扎气球游戏
  18. 微信无法显示好友头像
  19. java参考中文站 http://www.javaref.cn
  20. 在html页面中引入另一个html页面

热门文章

  1. LoadRunner监控Linux
  2. redis cluster 安装配置
  3. Android必备:Android的体系结构
  4. 理解NSAttributedString
  5. Rootkit之SSDT hook(通过CR0)
  6. hadoop源码datanode序列图
  7. Delphi 调用webservice接口
  8. .NET企业级应用架构设计系列之应用服务器
  9. 获取用户电脑的上网IP地址
  10. 常见的http状态码(Http Status Code)