断言Assert:Core Java 7.2

断言 Assert

assert,是断定、坚称的意思。assertion,是主张、肯定的意思。

对于断言代码assert i>0;如果i的值实际是小于或者等于0,那么系统就会抛出一个AssertionError异常。
注意,AssertionError异常是Error的子类,性质相当于JVM自身内部异常。

什么时候应该选择使用断言呢

  • 如果在条件不成立的情况下继续执行的话,会发生致命的、不可恢复的错误时;即只有条件成立时,才有继续运行的意义。就可以用 assert 条件表达式;
    比如,如果我们开发的一个系统,要求计算机的内存(memSize)至少是2G,如果小于2G,可能运行一会儿,系统就会崩溃。这时,就可以直接用断言,assert memSize>2G;要求 条件表达式 memSize>2G必须成立,如果不成立、程序就没必要再继续启动。
  • 断言检查只用于开发和测试阶段

启用禁用断言

在默认情况下, 断言被禁用。

可以在运行程序时用 -enableassertions 或 -ea 选项启用:
java -enableassertions MyApp

需要注意的是, 在启用或禁用断言时不必重新编译程序。启用或禁用断言是类加载器( class loader) 的功能。当断言被禁用时, 类加载器将跳过断言代码, 因此,不会降低程序运行的速度。

有些类不是由类加载器加载, 而是直接由虚拟机加载。可以使用以下这些开关有选择地启用或禁用那些类中的断言。

在某个类或整个包中使用断言, 例如:
java -ea:MyClass -eaiconi.inycompany.inylib.. , MyApp

这条命令将开启 MyClass 类以及在 com.mycompany.mylib 包和它的子包中的所有类的断言。选项 -ea 将开启默认包中的所有类的断言。

用选项 -disableassertions 或 -da 禁用某个特定类和包的断言:
java -ea:... -da:MyClass MyApp

启用和禁用所有断言的 -ea 和 -da 开关不能应用到那些没有类加载器的“ 系统类”上。对于这些系统类来说, 需要使用
-enablesystemassertions/-esa 开关启用断言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章