代码之家  ›  专栏  ›  技术社区  ›  Stan Kurilin

Java中的Assert关键字

  •  38
  • Stan Kurilin  · 技术社区  · 16 年前

    你用这个吗 assert

    5 回复  |  直到 7 年前
        1
  •  72
  •   Community Mohan Dere    9 年前

    AssertionError )如果它的条件是假的。断言为您提供了一种简化的方法来记录、检查和强制执行代码的正确性标准。好处是提供了一个语言级的钩子来定义和操作这些正确性条件。如果您希望启用或禁用它们(关于这是否是一个好主意存在争议),您可以从JVM命令行执行此操作。下面的一些注释者注意到断言在默认情况下是禁用的,除非在调试模式下运行;我的实践是在包装器脚本中随时添加“-ea”(enable assertions)。即使在对性能敏感的代码中,对我来说,这种权衡也有利于我从断言中获得的安全性/正确性信心。 Assertions at Oracle API Description for AssertionError

    请注意预期或意外失败(异常)与断言失败之间的区别——断言失败记录了程序员的假设,表明程序不正确,而不是意外的外部条件或预期的异常条件。 如果断言失败,解释是程序员误解或错误地表达了程序

    Design by Contract .

    有效Java项目#38“检查参数有效性”( Google Books , Amazon.com )提供了参数检查和断言的适当使用之间的区别的有用表示。

    Enabling assertions in netbeans Assertions vs. Exceptions ), ( Near duplicate, asking for examples ), ( Badly named, but very similar content )

        2
  •  5
  •   deinocheirus Aleksander Blomskøld    12 年前

        3
  •  4
  •   kervin    11 年前

    它给你带来了什么好处?为什么你认为它不值得使用?

    如其他人所建议的那样,使用断言进行强制检查是一种错误的做法 危险行为

    当其他开发人员使用您的库时会发生什么?或者系统管理员或高级用户忘记,或者更糟的是不知道,使用 运行时标记?你丢了所有的支票,就是这样。

    远离的

    应用程序中的任何特性或优点都不应该依赖于断言。

    作为背景,在C/C++中,断言使用了相同的方式。在C/C++中,开发人员通常可以通过 #define DEBUG ... 在编译时启用或禁用断言。用C/C++生产代码通常有这个功能关闭。

        4
  •  0
  •   Balaji Boggaram Ramanarayan    12 年前

    准确地说,你的问题是:

    Assert用于验证语句的条件。

    assert (some condition)
    Example : assert (6 < 7) // condition pass
              assert (6 > 7) // throws AssertionException here
    

    大多数人将assert用于以下字符串用例:(但我个人不喜欢使用assert):

    assert (obj != null || obj.isEmpty() || ... )
    

    我更喜欢使用干净的谷歌番石榴,它的作用是:

    Obj.isNullOrEmpty()
    

    更多信息: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Strings.html

        5
  •  -2
  •   irreputable    16 年前

    您可以在开发过程中使用它来启用某些东西,然后在实时站点上完全禁用它。例如

    ...
    assert debug("xxx");
    ...
    
    static boolean debug(String format, Object... args){ print(...); return true; }
    

    debug语句将在活动站点上增加零开销。