例外 - 为什么甚至打扰投掷?

时间:2013-09-05 19:07:50

标签: java exception exception-handling try-catch

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

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

现在,为什么我还要在我的代码中创建新的异常? 显然我使用的所有库都已经抛出它们,并且它们也非常有用。

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

你能否提出一个好的论据,为什么我应该创建新的例外并扔掉它们?

编辑我的意思:

为什么要为此烦恼:

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();

}

3 个答案:

答案 0 :(得分:1)

您的客户想要详细的错误报告。出了什么问题,出了什么问题。

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

答案 1 :(得分: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());
       }
}

答案 2 :(得分:0)

From Java tutorials - Advantages of Exceptions

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

      

    过于通用的异常处理程序可以通过捕获和处理程序员没有预料到的异常而使代码更容易出错。

         

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