zoukankan      html  css  js  c++  java
  • assert(断言)关键字

    一:assert关键字介绍

    Java在JDK1.4时加入了assert(断言)关键字,一般开发中很少用到;

    assert有两种用法:

    (1)asset booleanValue;

          这里booleanValue是一个必须为真(true)或者假(false)的表达式。如果表达式的结果为true,那么断言为真,并且无任何行动;
          如果表达式为false,则断言失败,则会抛出一个AssertionError对象。这个AssertionError继承于Error对象,
          而Error继承于Throwable,Error是和Exception并列的一个错误对象,通常用于表达系统级运行错误。  

          

    (2)asset condition : stringValse;

      这里condition是和上面一样的,这个冒号后跟的是一个表达式,通常用于断言失败后的提示信息,说白了,它是一个传到AssertionError构造函数的值,如果断言失败,该值被转化为它对应的字符串,并显示出来。

         

    二:如何在Ecplice环境中使assert生效

    1:必须要是JDK1.4之后版本;

    同时,将
    "Use Default Compiler Settings"前的勾去掉。并将下面的
    "Generated .class file compatibility"和"Sourcecompatibility"均选择为1.4以上,才能正确编译。

    2:Ecplice设置JVM启动参数:assert有效:

    在Arguments页面中的"VM Arguments" 中填入-ea或者-enableassertions选项。才能让断言在运行时起作用。

    上图是配置RUN模式的,如果想DEBUG模式也生效,则下图配置启动信息也需要加-ea参数(默认是-da 不生效):

    配置完成之后运行如图:

    第一种方式异常:

    第二种方式异常:(自定义异常信息)

    三:指定某些路径断言有效无效配置

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

    四:assert进阶

    因为在运行时默认是关闭assert的,因为开启assert校验,也会损耗一定的性能,并且如果在关键部分的校验使用了assert验证,但是忘记开启assert功能,那么肯定会造成重大的失误,所以在生产环境下的代码,是不建议使用assert功能的,一般都是在测试类里面使用的比较多。

    那么,既然没法在生产环境中使用assert功能,那么有没有替代的assert的组件?

    答案是肯定的,这里面分几种情况:

    (1)在spring环境中,可以直接使用工具类Assert:

    Assert.notNull(obj, "object was null");

    (2)如果不在spring中,在普通的Java项目中可以使用jdk7中自带的Objects工具类:

    Objects.requireNonNull()

    (3)如果觉得Objects工具类功能较弱,可以引入junit工具类里面的Assert类:

    Assert.assertNotNull();

    本文主要介绍了Java中assert关键字的功能和其用法,虽然assert关键字使用起来比较方便,但是由于其自身的缺点,所以不推荐在生产环境中使用,不过我们使用其他的替代方案来完成同样的功能,这一点需要注意。

     

  • 相关阅读:
    日报11.1
    CCC2020 Surmising a Sprinter's Speed
    3D扫雷 (3D Minesweeper)
    如何使用小米手环与PN532(或类似芯片)复制验证卡号的IC卡
    分享一个api:随机二次元图片
    NOIP2017 时间复杂度 大模拟
    《区块链100问》笔记整理——42~49问
    Coursera-AndrewNg(吴恩达)机器学习笔记——第四周编程作业(多分类与神经网络)
    Coursera-AndrewNg(吴恩达)机器学习笔记——第四周
    《区块链100问》笔记整理——23~41问
  • 原文地址:https://www.cnblogs.com/HaveChen/p/11453902.html
Copyright © 2011-2022 走看看