JavaBase:断言

断言

提出问题

假设确信某个属性符合要求,并且代码的执行依赖于这个属性,例如需要计算double y = Math.sqrt(x);即确信x是一个非负数。

而我们依然希望对它进行检查,避免一些非法的参数进来,或者说抛出一个异常。但是这些做法都会使得代码一直保留在程序当中,测试完毕后也不会自动删除,如果在程序中含有大量这种检查,则持续运行起来会非常慢。

概述

是什么

断言允许在测试期间向程序中向代码中插入一些检查语句,当代码发布时,这些检测语句会自动移走。Java引入了关键字assert。

分类,各个分类是什么

  • assert 条件。对条件进行检查,如果结果为false,则抛出一个AssertionError异常
  • assert 条件:表达式。表达式将被传入AssertionError构造器并转换成一个消息字符串。

启用和禁用断言

默认情况下会禁用断言,可以在运行程序时-enableassertions或-ea启用。

当重启断言时,不需要重新编译程序,启用或禁用断言是类加载器的功能,当断言被禁用则编译器会跳过断言代码。

使用断言完成参数检查

在Java中给出了3种处理系统错误的机制

  • 抛出异常
  • 日志
  • 断言。那么合适使用断言呢
    • 断言的失败是致命的,不可恢复的错误
    • 断言检查只用于开发和测试阶段。
1
2
3
if [ -f ~/.dircolors ]; then  
eval `dircolors ~/.dircolors`
fi

参考