Java:何时使用已检查的异常,未经检查的异常或断言

时间:2014-08-04 20:18:07

标签: java exception exception-handling assertions

我写了以下方法:

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

参数x必须介于0和10之间,尽管使用此代码的任何人都不会遇到问题,因为使用此方法的任何人都不会拥有不符合要求的x。捕获和处理检查的异常可能有点单调乏味,因为"计数"方法将被调用。强制执行x的最佳方法是0到10之间:检查异常,未经检查的异常或断言?

2 个答案:

答案 0 :(得分:1)

  • 检查异常肯定是不可能的,因为它们只对输入 1 的有效性的事件有意义;
  • 未经检查的异常作为验证错误是有道理的:例如,抛出IllegalArgumentException将会出现在本书中;
  • Java断言应仅用于断言方法不变量,那些必须保存输入的方法。断言失败应该意味着有罪的部分"不是来电者,而是方法的代码本身。

1 Josh Bloch,Effective Java,Item 41:

  

如果通过正确使用API​​ 无法阻止异常情况,那么[已检查异常]的负担是合理的。使用API​​的程序员在遇到异常时可以采取一些有用的操作。除非这两个条件都成立,否则未经检查的异常更合适。

答案 1 :(得分:0)

这取决于你的风格,但最常见的方式是未经检查的例外。

我会编写类似这样的代码:

public int count(int x){
 if (x < 0 || x > 10) {
     throw new IllegalArgumentException(...);
 }
 //method contents
}