昨天在看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方法参数值检查。

Java 关于assert的更多相关文章

  1. K:java 断言 assert 初步使用:断言开启、断言使用

    @转自天地悠悠的个人博客 主要总结一下在eclipse中如何使用断言. (一)首先明确: java断言Assert是jdk1.4引入的. jvm 断言默认是关闭的. 断言是可以局部开启的,如:父类禁止 ...

  2. java断言assert初步使用:断言开启、断言使用

    1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. 断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”. 断言只适用复杂的调式过程. ...

  3. 01 java断言assert初步使用:断言开启、断言使用

    参考文件:http://blog.sina.com.cn/s/blog_59c9412d0100fd55.html 1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. ...

  4. Java中assert(断言)的使用

    Java中assert(断言)的使用 1.Eclipse中默认assert(断言)是关闭,开启方式如下: 简单来说:就是设置一下jvm的参数,参数是-enableassertions或者-ea(推荐) ...

  5. java 关键字 assert的学习

    之前在学习java源码时,发现了assert这个不常用的关键字.下面直接来介绍下这个关键字的使用. assert是什么? 它是jdk1.4之后新增加的关键字,没了. assert的作用是什么? ass ...

  6. 14)Java中Assert

    J2SE 1.4在语言上提供了一个新特性,就是assertion(断言)功能,它是该版本在Java语言方面最大的革新.在软件开发中,assertion是一种经典的调试.测试方式. jvm 断言默认是关 ...

  7. Java断言assert

    public class Welcome{ public static void main(String[] args){ assert false; System.out.println(" ...

  8. 关于java中assert(断言)的使用讲解

    说明:写的不是很全面,有任何问题请留言,多交流,谢谢! 1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enabl ...

  9. Java 之 assert (断言)

    我们知道C/C++语言中有断言的功能(assert).在Java SE 1.4版本以后也增加了断言的特性. 断言是为了方便调试程序,并不是发布程序的组成部分.理解这一点是很关键的. 默认情况下,JVM ...

随机推荐

  1. 下载苹果APP历史版本

    1.参考教程: iOS 下载旧版本 app 或者已下架 app 方法 - 简书 https://www.jianshu.com/p/33dc8bfd4134 2.步骤总结: 下载旧版带 app 管理的 ...

  2. Akka Essentials - 2

    Actors Defining an actor class MyActor extends Actor { def receive = { } } In Scala, the receive blo ...

  3. xml与java对象转换 -- XStreamAlias

    @XStreamAlias使用 一. 特点: 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口 ...

  4. flannel相关资料链接

    1.DockOne技术分享(十八):一篇文章带你了解Flannel http://dockone.io/article/618 2.理解Kubernetes网络之flannel网络http://ton ...

  5. django博客项目9

    ................

  6. 细数Python中的数据类型以及他们的方法

    一.数据类型的种类及主要功能 1.数字类型 数字类型主要是用来计算,它分为整数类型int和浮点类型float 2.布尔类型 布尔类型主要是用于判断,它分为真True和False两种 3.字符串类型 字 ...

  7. 协程+IO切换实现并发

    from gevent import monkey # 以后代码中遇到IO都会自动执行greenlet的switch进行切换 monkey.patch_all() import requests im ...

  8. Python高级教程-列表生成式

    List Comprehensions(列表生成式) 列表生成式,是Python内置的非常简单却强大的可以用来创建list的生成式. 例如,要生成list:[1,2,3,4,5,6,7,8,9,10] ...

  9. 让你的代码量减少3倍!使用kotlin开发Android

    (一) 创建Kotlin工程 (二) –秘笈!扩展函数 (三) 缩短五倍的Java Bean 本项目使用的代码地址

  10. 【TensorFlow】tf.nn.conv2d是怎样实现卷积的?

    tf.nn.conv2d是TensorFlow里面实现卷积的函数,参考文档对它的介绍并不是很详细,实际上这是搭建卷积神经网络比较核心的一个方法,非常重要 tf.nn.conv2d(input, fil ...