Java 关于assert

Posted 小稀稀和她的小摩的

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.    可用于检查私有方法的参数值
  3.    用于测试方法的前置条件和后置条件
  4.    用于检查类的不变状态, 确定在任何情况下, 某个变量状态必须满足

4. assert不适用场景

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

总结 : 

   assert通常用于检查一些对程序有很大影响的关键。

以上是关于Java 关于assert的主要内容,如果未能解决你的问题,请参考以下文章

关于 assert 断言的思考

关于Debug Assertion Failed问题

关于rails里集成测试assert_template的写法

IOS之Bug--关于Assertion failure in -[UIApplication _runWithMainScene

关于C语言中assert等语法在嵌入式应用当中的含义

Debug.Assert 与异常