`
cnetwei
  • 浏览: 174479 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java断言——assert

阅读更多

Java断言——assert

 

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


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

 

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

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

java -ea myPackage.myProgram
//或者
java -enableassertions myPackage.myProgram

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

 

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

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

 

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

参数 例子 说明
-ea java -ea 打开所有用户类的assertion
-da java -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
-esa java -esa 打开系统类的assertion
-dsa java -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 

 即可。

分享到:
评论

相关推荐

    Java断言(assert)

    可以为Java复杂的测试提供简单的方法!可以加快开发进度

    Java陷阱之assert关键字

     在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都将忽略!),如果要开启断言...

    断言函数assert[归纳].pdf

    断言函数assert[归纳].pdf

    java异常处理机制示例(java抛出异常、捕获、断言)

    主要介绍了java异常处理机制示例(java抛出异常、捕获、断言),需要的朋友可以参考下

    Assert.java

    适用于Java大部分非空判断,有效的减少空指针问题,直接调用Assert 里面的方法就行,非常方便,你值得拥有

    C语言断言assert讲解

    在讲解之前,我们先来对断言做一个基本的介绍,让大家对断言有一个大致的了解。

    JAVA断言技术详解

    JAVA断言技术详解,1、What will happen when you attempt to compile and run the following code? (Assume that the code is compiled and run with assertions enabled) 1. public class AssertTest 2. { 3. ...

    业务异常提示处理 springboot+Assert(自定义断言)

    使用springboot框架快速搭建,封装自定义断言做业务校验,公共异常处理打印日志, 更简单的业务判断处理

    eclipse如何开启断言assert

    eclipse如何开启断言assert调试,文档详细的讲解了配置的流程。

    Node.js利用断言模块assert进行单元测试的方法

    对于NodeJS, assert模块提供了一系列的断言测试,其实这个模块主要倾向于内部使用,但是也能被用于项目中, 可以通过require(‘assert’)的方式引入,下面本文将给大家介绍关于Node.js用断言模块assert进行单元测试的...

    Java陷阱之assert关键字详解

    详细介绍了Java陷阱之assert关键字,有需要的朋友可以参考一下

    C语言断言assert的用法.pdf

    C语言断言assert的用法.pdf

    VC中如何使用ASSERT断言

    VC中如何使用ASSERT断言 VC中如何使用ASSERT断言

    Junit测试Void方法

    Junit通常用于那些有明确返回值的方法的测试,而无法对返回值是void类型的方法进行测试,因为Junit的assert断言方法只适用于预期值与实际值的比较,对于void类型的方法,我们无法从它的return语句获得具体的返回值。...

    深入探讨C++中的引用和ASSERT断言

    深入探讨C++中的引用和ASSERT断言,对引用和断言的理解会有很大的帮助

    python assert的用处示例详解

    使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单。在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要...

Global site tag (gtag.js) - Google Analytics