Java断言——assert

Java从1.4版本开始提供了一个新特性——断言(assertion)。在软件开发中,断言是一种经典的调试与测试方式。


简单来看 断言其实就是在程序中的一条语句(assert),它对一个boolean表达式进行测试,一个正确程序必须保证该表达式的值为true,如果该值为false,则说明程序已处于不正确的状态,运行将被终止并退出——即 断言用于保证程序最基本、
关键的正确性。

 

断言检查通常在开发和测试阶段开启。而在软件发布后 为提高运行性能,断言检查会被关闭。因此能够随时自由地选择开启或关闭断言检查显得非常重要,而这正是Java断言特性的重要功能之一。。

默认状态下断言检查是关闭的,可以在运行时通过参数-eaenableassertions)开启断言检查,与之对应的是-dadisenableableassertions)用于关闭断言检查,例如:

Java代码   收藏代码
  1. java -ea myPackage.myProgram  
  2. //或者  
  3. java -enableassertions myPackage.myProgram  

下文再进一步讲解-ea/-da参数的用法,让我们先来看看assert语句的语法吧。

 

assert的语法格式有以下两种:

Java代码   收藏代码
  1. assert expression1;  
  2. assert expression1 : expression2;  

expression1是布尔表达式,必须保证在程序运行是其值为真,否则将抛出AssertionError异常并终止运行。

expression2是可选的。它用于当expression1为假时,作为构造器参数传递给AssertionError异常类,因此expression2的类型必须是合法的AssertionError构造器的参数类型。AssertionError共支持7中类型的构造器参数,分别是:boolean、char、double、float、int、long和Object,它们将会根据相关规范转换成错误提示信息字符串。

 

 

参数-ea & -da详解

-ea和-da的全名为-enableassertions和-disenableassertions,全名和缩写名有同样的功能。它们的含义为开启(-ea)或关闭(-da)断言功能。
通过-ea
(或-da)参数,可以打开(或关闭)某些类或者某些包的断言功能,

如果-ea(或-da)不带任何参数时:表示打开(或关闭)所有用户类的断言检查;如果带有包名称或者类名称 则表示打开(或关闭)这些类或包的断言检查;如果包名称后面跟有三个点 表示这个包及其子包都打开(或关闭)断言检查;如果只有三个点则代表无名包;

 

下面表格罗列了参数含义 及其例子:

参数例子说明
-eajava -ea打开所有用户类的assertion
-dajava -da关闭所有用户类的assertion
-ea:<classname>java -ea:MyClass1打开MyClass1的assertion
-da:<classname>java -da: MyClass1关闭MyClass1的assertion
-ea:<packagename>java -ea:pkg1打开pkg1包的assertion
-da:<packagename>java -da:pkg1关闭pkg1包的assertion
-ea:...java -ea:...打开缺省包(无名包)的assertion
-da:...java -da:...关闭缺省包(无名包)的assertion
-ea:<packagename>...java -ea:pkg1...打开pkg1包和其子包的assertion
-da:<packagename>...java -da:pkg1...关闭pkg1包和其子包的assertion
-esajava -esa打开系统类的assertion
-dsajava -dsa关闭系统类的assertion
综合使用java -dsa:MyClass1:pkg1关闭MyClass1和pkg1包的assertion

 

请注意上表中的-esa 和 -dsa参数,他们与-ea、-da的唯一区别是,前者用于打开(或关闭)系统类的断言检查功能。所谓系统类 是指像java.lang.Object这样的Java系统类库中的类。

 

另外,你还可以使用Java API来调整断言开启状态,

  • ClassLoader.setDefaultAssertionStatus():用于开启/关闭断言;
  • ClassLoader.setPackageAssertionStatus():用于开启/关闭某些包的断言;
  • ClassLoader.setClassAssertionStatus():用于开启/关闭某些类的断言;
  • ClassLoader.clearAssertionStatus:用于关闭断言;

在Eclipse中启用断言的方法:

  • 方法1、Window-->Preferences-->Java-->Installed JREs
    选择当前正在使用的JDK条目,点击 Edit... 按钮,进入JRE Definition界面:在 Default VM Arguments 栏输入 -ea (或 -enableassertions) 参数。
  • 方法2、Run-->RunConfigurations,选择当前程序,并点击进入Arguments标签页,在VM arguments 栏输入 -ea(-enableassertions)参数。

以上两个方法,前者针对全局设置、后者仅对当前运行的程序有效。

 

在Android中启用断言的方法:

设置系统属性debug.assert ,在命令行环境中执行

      adb shell setprop debug.assert 1   

 即可。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值