Java 中的 Assert 关键字
是使用关键字还是引发一些验证运行时异常?它给你带来了什么好处,或者为什么你认为它不值得使用?assert
是使用关键字还是引发一些验证运行时异常?它给你带来了什么好处,或者为什么你认为它不值得使用?assert
如果 Assert 的条件为 false,则 Assert 将引发运行时错误(AssertionError)。断言为您提供了一种简化的方法来记录、检查和强制实施代码的正确性标准。其优点是用于定义和操作这些正确性条件的语言级挂钩。如果您希望启用或禁用它们(关于这是否是一个好主意存在争议),您可以从 JVM 命令行执行此操作。下面的一些评论者指出,除非在调试模式下运行,否则默认情况下禁用断言;我的做法是始终在我的包装脚本中添加“-ea”(启用断言)。即使在对性能敏感的代码中,对我来说,权衡利弊有利于我从断言中获得的安全性/正确性信心。Oracle 上的 Assertions 和 ASSERTION 的 API DescriptionError
请注意预期或意外故障(异常)与断言失败之间的区别 -- 断言失败记录了程序员的假设,并指示了不正确的程序,而不是意外的外部条件或预期的异常条件。如果发生断言失败,则解释是程序员误解或错误地表达了程序,而不是其他错误或失败的来源。
在实践中,我用它来记录我所做的明显或不明显的假设以及我在生成(特别是私有/内部)代码时想要强制执行的不变量,使自己和其他人清楚地了解为什么做出这些假设,在哪里做出,以及它们是否得到验证。比评论效果好得多。这是迈向合同设计的(小)一步。
有效的 Java 项目 #38 “检查参数的有效性”(Google Books,Amazon.com)提供了参数检查和正确使用断言之间的区别的有用演示。
与 SO 相关:(在 netbeans 中启用断言)、(断言与异常)、(近似重复,询问示例)、(名称不正确,但内容非常相似))
andersoj是正确的。只是为了让你知道,断言的好处是你可以简单地关闭它(如果你没有在java命令行中传递-ea)。这个简单的事情使它们非常适合在开发中使用,当你想要确保你没有破坏自己的代码时。