`

Java中的断言(assert)

阅读更多

一、语法形式:
    Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion),它的
语法形式有如下所示的两种形式:
1、assert condition;
    这里condition是一个必须为真(true)的表达式。如果表达式的结果为true,那么断言为真,并且无任何行动
如果表达式为false,则断言失败,则会抛出一个AssertionError对象。这个AssertionError继承于Error对象,
而Error继承于Throwable,Error是和Exception并列的一个错误对象,通常用于表达系统级运行错误。
2、asser condition:expr;
    这里condition是和上面一样的,这个冒号后跟的是一个表达式,通常用于断言失败后的提示信息,说白了,它是一个传到AssertionError构造函数的值,如果断言失败,该值被转化为它对应的字符串,并显示出来。

二、使用示例:
    下面是一个使用assert的例子:

public class TestAssert{
     public static void main(String[] args){
         String name = null;
         assert(name!=null):"变量name为空null";
         System.out.println(name);
     }
}

    上面程序中,当变量name为null时,将会抛出一个AssertionError,并输出错误信息。
要想让上面的程序中的断言有效并且正确编译,在编译程序时,必须使用-source 1.4选项。如:

javac -source 1.4 TestAssert.java

在Eclipse(3.0M9)开发环境中,必须在window->preferences 中,左边选中"Java->Compiler",右边选择
“Compliance and ClassFiles”页面下的将"Compiler Compliance Level"选择为1.4;同时,将
"Use Default Compiler Settings"前的勾去掉。并将下面的
"Generated .class file compatibility"和"Sourcecompatibility"均选择为1.4,才能正确编译。

 

{

eclipce中实现开启Assert:

选择菜单:Run ---> Run... ---> 选择 Arguments 选项卡

 VM arguments 文本框中输入: -ea   注意中间没有空格,如果输入 -da 表示禁止断言。

(如果找不到以上路径,请依次开启断言:Windows  -> Preferences ->Java ->Installed JREs ->点击正使用的JDK ->Edit ->Default VM Arguments文本框中输入:-ea)

不过记得要改回来。

如果禁止断言,则按第二步操作中,删除 -ea 或者将 -ea 改为 -da 即可。

}


同时,要想让断言起效用,即让断言语句在运行时确实检查,在运行含有assert的程序时,必须指定-ea选项
如:为了能够让上面的程序运行,我们执行下面代码:

java -ea TestAssert

在在Eclipse(3.0M9)开发环境中,运行时,我们必须配置运行时的选项"Run",在Arguments页面中的
"VM Arguments" 中填入-ea选项。才能让断言在运行时起作用。

三、注意事项:
    理解断言最重要的一点是必须不依赖它们完成任何程序实际所需的行为。理由是正常发布的代码都是断言无效的,即正常发布的代码中断言语句都不不执行的(或不起作用的),如果一不小心,我们可以错误地使用断言,如:

public class TestPerson{
    private String TestPerson(String name){
        this.name = name;
    }
    public void setName(String nameStr){
        this.name = nameStr;
    }
    public String getName(){
         return this.name;
    }
    public static void main(String[] args){
        TestPerson personObj = newTestPerson("Abner Chai");
        String personName = null;
        assert(personName=personObj.getName())!=null;
        System.out.println(personName.length());
    }
}

这个程序中,对personName的赋值被转移到assert6语句中,尽管断言有效时它可以很好地运行(即使用-ea运行
时可以有效地运行)但如果断言失效,则它会运行时报空指针错误。因为断言无效时,
personName=personObj.getName()一句永远不会执行!
    断言对Java来说是一个好的条件,因为它们使开发过程中错误类型检查流线化,例如,在没有assert之前,
上面的程序要想确认personName 不空,则必须:

if(personName!=null){
    System.out.println(personName.length());
}
才行。有了assert后,使用assert,只需一行代码,并且不必从发布的代码中删除assert语句。
于是,上面的那个程序,经改正后,我们可以这么样来正确的使用assert,如下:


public class TestPerson{
    private String TestPerson(String name){
        this.name = name;
    }
    public void setName(String nameStr){
        this.name = nameStr;
    }
    public String getName(){
         return this.name;
    }
    public static void main(String[] args){
        TestPerson personObj = newTestPerson("Abner Chai");
        String personName = null;
        personName=personObj.getName();
        assert personName!=null;
        System.out.println(personName.length());
    }
}

四、其它选项:
    当执行代码时,使用-ea选项使断言有效,也可以使用-da选项使断言无效(默认为无效)
同样,也可以通过在-ea或-da后面指定包名来使一个包的断言有效或无效。例如,要使一个com.test包中的断言
无效,可以使用:
-da:com.test
要使一个包中的所有子包中的断言能够有效或无效,在包名后加上三个点。例如:
-ea:com.test...
即可使com.test包及其子包中的断言无效。

相关文章链接:http://blog.csdn.net/AbnerChai/archive/2004/08/28/87379.aspx

 

http://blog.csdn.net/leichelle/article/details/7951321

关于是否开启断言了,请看这:

http://blog.sina.com.cn/s/blog_95feae0d0101hhcg.html

分享到:
评论

相关推荐

    Java断言(assert)

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

    Java陷阱之assert关键字

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

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

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

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

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

    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. ...

    assert-text:在需要时断言多行文本

    断言文本 比较多行文本时正确的断言消息。用法 var assertText = require ( 'assert-text' ) ;assertText . equal ( 'what a wonderful\n' + 'idea for the\n' + 'module' , 'what a wonderful\n' + 'idea for a\n' ...

    Java关键词assert的使用(基于IntelliJ IDEA)

    断言语句由assert引起,后面接boolean表达式,再接上冒号,最后是一旦断言错误的报错语句。 assert pythagorean(3, 4) == 25 : Error; IDE中的assert assert想在IDE中使用,就必须开虚拟机选项

    JAVA--达内培训笔记

    enum 枚举 assert 断言 一个标识符尽量符合语义信息,提高程序可读性 类 名 :每个单词首字母大写, 变量和方法 :第一个单词小写,后边的每个单词首字母大写 包 名 :全部小写 常 量 :全部大写 11、局部...

    java 常用英语词汇大全

    java 常用英语词汇大全 部分内容如下: algorithm n.算法['.lg.riem] annotation [java]代码注释[.n.u'tei..n] anonymous adj....(反义:directly adv....assert (关键字) 断言[.'s.:t] ‘ (java 1.4 之后成为关键字

    junit-assert-collector:Java库扩展了JUnit的ErrorCollector类,提供了典型的JUnit样式声明方法

    在使用该收集器的过程中,在调用断言时发生的故障将导致错误被添加到基础收集器中,并且直到测试完成才抛出错误。 此类的使用极大地清理了您的代码。 代替: @Rulepublic ErrorCollector collector = new ...

    JAVA面试题最全集

    9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中...

    java 面试题 总结

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...

    JAVA编程常用英语总汇

    assert(ion) 断言 assign 赋值 assignment 分配 assignment operator 赋值操作符 associated 相关的、关联、相应的 associative container 关联式容器(对应 sequential container) atomic 不可分割的 原子的 ...

    json-path-assert-2.1.0.zip

    JsonPath.zip,使用jsonpathjava jsonpath实现的json断言

    java经典面试题汇总

    答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...

    JAVA笔试题集锦(1-30)基础部分

    答:assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个 boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值...

    Java开发常用工具类

    fastjson,base64,redis,fileupload,jdbc,百度定位,localcache,断言,集合,日期,empty,异常,io(图片截图、压缩、获取像素以及文件的下载、拷贝、删除、循环读、等等),protocol(支持http&https;...

    assert-transformer

    断言变压器 为了编译代码,您需要Eclipse和/或Maven,以及Java 8。 要进行编译,请在根文件夹(即包含pom.xml的文件夹)中键入以下内容: mvn compile 生成.jar文件: mvn package 要生成具有依赖项的.jar文件...

    整理后java开发全套达内学习笔记(含练习)

    assert (关键字) 断言 [ә'sә:t] ' (java 1.4 之后成为关键字) associate n.关联(同伴,伙伴) [ә'sәuʃieit] attribute n.属性(品质,特征) [ә'tribju:t] boolean (关键字) 逻辑的, 布尔型 call n.v.调用; 呼叫...

Global site tag (gtag.js) - Google Analytics