Java异常处理 - 这是一个好习惯吗?

时间:2013-05-06 08:06:12

标签: java exception

我正在为框架开发Java插件。

我编写了我的代码,其入口点函数如下所示(考虑这是起点,主函数)

function entryPoint()
{
   try{
      //some code block
      subFunction1();
      subFunction2();
   }
   catch(Exception e) {}
   catch(IOException ioe) {}
   catch(NullPointerException npe){}
}

function subFunction1() throws IOException
{
    //some code
}

function subFunction2() throws NullPointerException
{
    //some code
}

所以这个想法是,所有的子函数都会抛出主要函数的特定异常 我们在主要功能中捕获这些例外并进行处理。

这种方式是否正确?如果没有,请建议更好的方式。

5 个答案:

答案 0 :(得分:10)

  • 应更改catch语句的顺序。由于第一个catch将匹配所有Exceptions,因此永远不会触发以下两个。

  • NPE在大多数情况下是意外的,无法恢复。捕获它意味着应用程序能够从中恢复并运行。真的是这样吗?

  • 即使NPE可以恢复,最好还是检查!= null而不是依赖命令流的异常。这是出于概念上的原因(基于异常的命令流需要更多代码,可读性更低,意图通常不清楚)以及性能原因。

  • 吞下所有Exceptions - 没有记录或重新抛出。这样,没有人会知道是否以及什么时候出错,因为没有记录异常。在大多数情况下,用户,其他开发人员和维护人员都希望几乎所有异常都是非常特殊的,因此可以记录。

答案 1 :(得分:1)

不要捕获或抛出NullPointerException,而Exception的catch块应该是最后一个

答案 2 :(得分:0)

我认为这种方法很完美。人们应该尝试处理特定的异常而不是处理所有异常。设置一个try-catch块只是为了它的使用不是使用它,而是滥用try-catch的东西。

是的,异常应该是最后一个要处理的。请注意这一点。

简而言之,你的意图很好,从语法上讲,你可以依赖编译器。

答案 3 :(得分:0)

如果没有插件,你应该像处理异常一样进行异常处理。这取决于您的应用程序,如果您可以在一个主要方法中处理所有异常。如果有案例,你可以继续工作,这可能很难这样。

关于插件,我唯一能做的就是全周围的'全能',也许还有一些特殊情况可以做更详细的日志记录。如果框架本身没有这样做,那么这也有待完成。

答案 4 :(得分:0)

我认为最好在第一个可以解决问题的地方发现异常。

一个例子:

function int divide(int a, int b) throws DivisionByZeroException {
    if(b == 0){
        throw new DivisionByZeroException();
    }
    return a / b;
}

function int doCalculationsAndStuff(int a, int b) throws DivisionByZeroException {
    int result = divide(a, b);
    ...
    return result; 
}

function void main() {
    try {
        int a = userInput();
        int b = userInput();
        int result = doCalculationsAndStuff(a, b);
        print("result: " + result);
    } catch(DivisionByZeroException e) {
        print("Division by zero happened. But i catched it for you =).");
    }
}

divide()doCalculationsAndStuff()处理异常是没有意义的。因为除零时你会得到什么价值?没有,这就是为什么我们抛出异常并在main函数中处理它,我们给计算器应用程序用户一些反馈。

现在回到你的问题。如果entryPoint函数是您可以解决子函数中出现的问题的第一个地方,那么这是处理它们的好地方。

相关问题