Java:何时使用检查异常、非检查异常或断言

标签 java exception assertions

我写了以下方法:

public int count(int x){
 //method contents
}

参数 x 必须介于 0 和 10 之间,尽管使用此代码的任何人都不会遇到问题,因为使用此方法的任何人都不会遇到不满足要求的 x。由于调用“count”方法的次数较多,捕获和处理检查的异常可能会有点乏味。强制 x 始终在 0 到 10 之间的最佳方法是什么:检查异常、非检查异常还是断言?

最佳答案

  • 检查异常绝对是不可能的,因为它们只对可能发生的事件有意义,与输入的有效性无关1
  • 未经检查的异常作为验证错误是有意义的:例如,按照书本规定抛出 IllegalArgumentException
  • Java 断言只能用于断言方法的不变量,即必须保存任何输入的方法。断言失败应该意味着“有罪的部分”不是调用者,而是方法的代码本身。
<小时/>

1 Josh Bloch,《高效 Java》,第 41 条:

The burden [of checked exceptions] is justified if the exceptional condition cannot be prevented by proper use of the API and the programmer using the API can take some useful action once confronted with the exception. Unless both of these conditions hold, an unchecked exception is more appropriate.

关于Java:何时使用检查异常、非检查异常或断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25126869/

相关文章:

java - 字符串太长时被截断

javascript - 在后端代码中添加 JSON 中的额外字段

java - java 程序中的 NoClassDefFoundError

java - 除了为 JDBC 添加 jar ,"java.lang.classnotfoundexception:com.mysql.jdbc.Driver "

c# - 为什么对于 C# 中 byte[] 类型的键,哈希表不会为 "ContainsKey"返回 true?

c++ - 之前未调用函数时出错

java - 具有隐藏构造函数的抽象类的实例

java - 并发 HashMap java

c# - 如果可能的异常列表太多,如何捕获特定异常?

django - 如何使用 django 测试系统测试 EmailMultiAlternatives 对象中的替代正文内容?