1

所以,我知道这听起来有点极端,但我想说明一点:

好的。所以我的代码不在乎抛出什么样的异常,99.9%的时间如果抛出异常,无论如何它都会处理它。

现在,我为什么还要费心在我的代码中抛出 \ 创建新异常?显然,我使用的所有库都已经抛出它们,而且信息量也很大。

为我的方法传递了一个空对象?谁在乎,我会自动抛出一个空指针异常。

您能否提出一个很好的论点,为什么我应该创建新的异常并抛出它们?

编辑我的意思:

为什么要为此烦恼:

public myMethod() {

try { 
    doStuff1();
}
catch(Exception e) {
throw new Exception("Error in doStuff1");
}
try { 
    doStuff2();
}
catch(Exception e) {
throw new Exception("Error in doStuff2");
}

当我可以使用这个:

public myMethod() {

doStuff1();
doStuff2();

}
4

3 回答 3

1

您的客户需要详细的错误报告。哪里出了问题,哪里出了问题。

他们不知道空指针异常是什么。即便如此,如果没有堆栈跟踪,这本身并不是特别有用。那么空指针会被传递到您的 RetrieveReportX 方法中吗?检查它是否为空并抛出 ReportXNoIdentifierException 而不是让它自动抛出空指针异常。然后,您将在某处有一个错误处理程序,基于这些自定义异常,可以准确报告在什么(人工)过程中出了什么问题,并且您的客户很高兴,因为在 [stacktrace] 中,他们可以看到“一个标识符”而不是 NullPointerException尝试检索报告 X 时未提供。”

于 2013-09-05T19:18:19.777 回答
0

来自 Java 教程- 异常的优点

  1. 优势 1:将错误处理代码与“常规”代码分开
  2. 优势 2:在调用堆栈上传播错误
  3. 优势 3:对错误类型进行分组和区分

回答

过于笼统的异常处理程序可以通过捕获和处理程序员没有预料到的以及处理程序不打算处理的异常来使代码更容易出错。

如前所述,您可以创建异常组并以一般方式处理异常,或者您可以使用特定异常类型来区分异常并以精确方式处理异常。

于 2013-09-05T19:30:42.350 回答
0

我为什么要创建新的异常并抛出它们?

Exception在某些情况下,故意投掷是常见且良好的做法。

IllegalArgumentException

如果您的方法只接受特定范围内的参数,例如只接受正数,那么您应该检查无效参数并抛出 IllegalArgumentException。

例如:

public int calculateFactorial(int n) {
  if (n < 0)
    throw new IllegalArgumentException("n must be positive");
  if (n >= 60)
    throw new IllegalArgumentException("n must be < 60");
  ...
}  
public void findFactorial(int n)
{
     try{
          calculateFactorial(n)       
      }catch(IllegalArgumentException ie){
         System.out.println(ie.getMessage());
       }
}
于 2013-09-05T19:29:12.707 回答