ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

浅析Java断言

2021-08-18 22:31:15  阅读:243  来源: 互联网

标签:... Java 断言 int ea else assert 浅析


Java断言

1.断言的概念

Java的断言机制assert是一种用于测试阶段的语法特性,它允许我们在测试期间向代码中插入一些检查语句。代码发布时这些检测语句将被自动移除。

断言关键字assert有下列两种形式

  • assert 条件;
  • assert 条件:表达式;

当结果为false时,会抛出一个AssertionError异常。在第二种形式中,表达式将被传入异常的构造器,构造出你想要的一种消息字符串。

注意这个消息字符串仅在这个时候被创建并跟随异常展示出来,而不能以任何方式被保存。因为如果保存为一个内存中的变量,意味着断言机制可能脱离测试环境而影响到代码的真实运行。

例如,我们要断言x是一个正数,只需要使用以下形式。

assert x > 0;

也可以将x的值传递给异常构造器,从而显示。

assert x > 0 : x;

2. 启用和禁用断言

默认情况下断言被禁用,可以在运行程序时用-enableassertions-ea这两个参数中的一个来启用。

启用和禁用断言时不需要重新编译程序,因为启用和禁用断言是类加载器的功能,而类加载器在解释字节码阶段运行。

  • 也可以在某个类或者整个包中使用断言,如

    java -ea:MyClass -ea:com.pedro.src... MyApp
    

    这段代码将开启MyClass类以及com.pedro.src包和它的所有子包中的断言。

  • 也可以用选项-disableassertions-da禁用某个特定类和包的断言

    java -ea:... -da:MyClass MyApp
    

3.使用断言完成参数检查

使用断言有两个需要注意的条件

  • 断言失败应该是一种致命且不可恢复的错误。
  • 断言检查只用于开发和测试阶段,它只用于程序员或测试人员确定程序内部的错误位置。

例如我们有一个方法签名

static void sort(int[] array,int x,int y){
	...
}

我们希望拒绝null数组调用这个方法,那我们应该这样做。

static void sort(int[] array,int x,int y){
	assert a != null;
    ...
}

这样的在方法开头检查参数的形式我们称为前置条件

4.为文档中的假设使用断言

以下是一段示例代码,我们试图用注释的方式说明一个if-else分支中的假设。

if (i X 3 == 0)
    ...
else if (i X 3 = 1)
    ...
else // (i % 3 == 2)
    ...

我们也可以用断言做这件事

if (i X 3 == 0)
    ...
else if (i X 3 = 1)
    ...
else 
    assert i % 3 == 2;
    ...

但是实际上,如果我们是经验丰富的工程师,我们应该会考虑到i可能是一个负值,所以最好在 if 语句之前使用另一个断言。

assert i >= 0;
if (i X 3 == 0)
    ...
else if (i X 3 = 1)
    ...
else 
    assert i % 3 == 2;
    ...

标签:...,Java,断言,int,ea,else,assert,浅析
来源: https://www.cnblogs.com/WangXianSCU/p/15159185.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有