前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java的断言(assert)

java的断言(assert)

作者头像
xiangzhihong
发布2018-02-05 15:16:16
4K0
发布2018-02-05 15:16:16
举报
文章被收录于专栏:向治洪向治洪

概述

在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,并输入<错误信息表达式>。

代码示例

根据断言的语法规则,如果<boolean表达式>为true,则程序继续执行。如果为false,则程序抛出AssertionError,并终止执行。

代码语言:javascript
复制
public class AssertDemo {
	 public static void main(String args[]) {
	        //断言1结果为true,则继续往下执行
	        assert true;
	        System.out.println("断言1没有问题,Go!");
	        System.out.println("******************");
	        //断言2结果为false,程序终止
	        assert false : "断言失败,此表达式的信息将会在抛出异常的时候输出!";
	        System.out.println("断言2没有问题,Go!");
	    }
}

避免使用断言

assert关键字用法简单,但是使用assert往往会让你陷入越来越深的陷阱中。应避免使用。我也是最近看之前写的项目,在做登录的时候,经常莫名其妙的退出,看到一段断言。

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

断言Eclipse的相关设置

在eclipse中,必须开启相关设置。具体在偏好设置,选择Installed JREs,选择相关版本,点击edit,在Default VM arguments里面输入-ea就可以了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 语法
    • 1、assert <boolean表达式>
      • 2、assert <boolean表达式> : <错误信息表达式>
      • 代码示例
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档