断言
提出问题
假设确信某个属性符合要求,并且代码的执行依赖于这个属性,例如需要计算double y = Math.sqrt(x);
即确信x是一个非负数。
而我们依然希望对它进行检查,避免一些非法的参数进来,或者说抛出一个异常。但是这些做法都会使得代码一直保留在程序当中,测试完毕后也不会自动删除,如果在程序中含有大量这种检查,则持续运行起来会非常慢。
概述
是什么
断言允许在测试期间向程序中向代码中插入一些检查语句,当代码发布时,这些检测语句会自动移走。Java引入了关键字assert。
分类,各个分类是什么
- assert 条件。对条件进行检查,如果结果为false,则抛出一个AssertionError异常
- assert 条件:表达式。表达式将被传入AssertionError构造器并转换成一个消息字符串。
启用和禁用断言
默认情况下会禁用断言,可以在运行程序时-enableassertions或-ea
启用。
当重启断言时,不需要重新编译程序,启用或禁用断言是类加载器的功能,当断言被禁用则编译器会跳过断言代码。
使用断言完成参数检查
在Java中给出了3种处理系统错误的机制
- 抛出异常
- 日志
- 断言。那么合适使用断言呢
- 断言的失败是致命的,不可恢复的错误
- 断言检查只用于开发和测试阶段。
1 | if [ -f ~/.dircolors ]; then |