断言学习

前言

    最近看项目代码,发现里面有大量的断言。已经看不懂了,偷偷百度学习一下。

 百度搜索 断言:断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。


有点拗口,个人觉得 断言就是在程序员在程序运行前,预估某个变量的值。如果程序在运行时预估值与实际值不相等,则抛出异常提示。那么断言实际上主要是应用在程序调试上(虽然网上很多文章说 在生产上关闭断言是把孩子和洗澡水一起倒掉了)。

动手测试一下 增强记忆。

测试--未开启断言

代码:

public class AssertExample {

public static void main(String args[]) {

int x = 1;

System.out.println("Testing Assertion start");

assert (x == 2);

System.out.println("Testing Assertion passed!");

}

}

运行结果:

因为未开启断言,所以断言不起作用。

Testing Assertion start

Testing Assertion passed!


测试 启动断言

代码同上,运行时设置运行参数,以Eclipse为例

运行结果:

当数值与预估不一直时报出异常:

Exception in thread "main" java.lang.AssertionError 

at assertTest.AssertExample.main(AssertExample.java:7)

Testing Assertion start


测试 正确预测

代码:

public class AssertExample {

public static void main(String args[]) {

     int x = 1;

    System.out.println("Testing Assertion start");

    assert (x == 1);

    System.out.println("Testing Assertion passed!");

  }

}

运行结果:

Testing Assertion start

Testing Assertion passed!

测试  主动报出异常信息

代码:

public class AssertExample {

public static void main(String args[]) {

int x = 1;

System.out.println("Testing Assertion start");

assert x == 2 :"x is error";

System.out.println("Testing Assertion passed!");

}

}

运行结果:

Testing Assertion start

Exception in thread "main" java.lang.AssertionError: x is error

at assertTest.AssertExample.main(AssertExample.java:7)


后记

   1.断言尤其适合在一些循环的调试中,当循环值或者变量发送变化后,进行调试。

    2.代码中一些常用的字符合法性检查可以交由断言来实现

public static void assertObjectNotNull(String fieldName, Object fieldValue) {

/* if (fieldValue == null) {

throw new IllegalArgumentException(String.format("[%s]不能为空。", fieldName));

}*/

assert(null!=fieldValue):fieldName+"字段不能为空";

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 断言概述 编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设 可以将断言看作是异常处理的一种高级...
    Zcclucky阅读 6,729评论 0 1
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 10,147评论 1 114
  • DAY 05 1、 public classArrayDemo { public static void mai...
    周书达阅读 4,044评论 0 0
  • 1 顺序语句 语句:使用分号分隔的代码称作为一个语句。 注意:没有写任何代码只是一个分号的时候,也是一条语句,...
    哈哈哎呦喂阅读 3,043评论 0 0
  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 5,503评论 0 9