Java 关于assert

昨天在看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的使用方式

  1.    assert expression;
  2.    assert expression1 : expression2; 

          expression2 是作为 java.lang.AssertionError 的errorMsg. 

 assert (1>2) : (1>2?"correct":"This is the errorMsg");
 System.out.println("success");

  Exception in thread "main" java.lang.AssertionError: This is the errorMsg

          (oh shit, 这蛋疼得编辑器,还没用习惯) 

3. assert适用场景

  1.    在预计正常情况下程序不会到达的地方 : assert false;
  2.    可用于检查private方法的参数值
  3.    用于测试方法的前置条件和后置条件
  4.    用于检查类的不变状态, 确定在任何情况下, 某个变量状态必须满足

4. assert不适用场景

  1.    不要使用assert作为public方法的参数检查, public方法的参数永远都要执行
  2.    assert语句不可有任何边界效应, 不要使用assert语句去修改变量和改变方法的返回值。

总结 : 

   assert通常用于检查一些对程序有很大影响的关键值, 表达式应短小易读。适用于private方法参数值检查。

原文地址:https://www.cnblogs.com/djoel/p/5565954.html