昨天在看NIO源码的时候,看到这样一句,顿时懵逼了 :
assert (i >= 0);
assert关键词我是有映像的, 中文叫断言。但是从来没有去了解过它的功能, 今天在感冒中抽出时间, 把我总结的码出来:
1. JVM默认关闭assert, 可通过 -ea 命令开启
(1) java 命令开启assert
java -ea $classname
(2) eclipse中开启assert
在项目上右击 Run As -> Run Configurations -> Arguments Tab 在VM arguments中填入 -ea 再Apply
或者 Window -> Preferences -> Java -> Installed JREs 选中JDK点击 Edit, 在Default VM arguments: 中输入 -ea 再Finish
2. assert的使用方式
- assert expression;
- assert expression1 : expression2;
expression2 是作为 java.lang.AssertionError 的errorMsg.
assert (1>2) : (1>2?"correct":"This is the errorMsg");
System.out.println("success");
System.out.println("success");
Exception in thread "main" java.lang.AssertionError: This is the errorMsg
(oh shit, 这蛋疼得编辑器,还没用习惯)
3. assert适用场景
- 在预计正常情况下程序不会到达的地方 : assert false;
- 可用于检查private方法的参数值
- 用于测试方法的前置条件和后置条件
- 用于检查类的不变状态, 确定在任何情况下, 某个变量状态必须满足
4. assert不适用场景
- 不要使用assert作为public方法的参数检查, public方法的参数永远都要执行
- assert语句不可有任何边界效应, 不要使用assert语句去修改变量和改变方法的返回值。
总结 :
assert通常用于检查一些对程序有很大影响的关键值, 表达式应短小易读。适用于private方法参数值检查。