例外与Java之间的区别

时间:2016-04-14 19:37:31

标签: java exception-handling

我有两个例子:

void terminate(String x) {
     System.exit(0);
}

void x (long y) {
if(y == null) {
    terminate();
}
//code
}
.....
x(null); //Don't want that

这个例子似乎有效。我想确保long y不为null。我可能会这样做:

void x (long y) throws NullPointerException {
//code
}
...
try {
x(null);
} catch (NullPointerException e) {
 e.printstacktrace();
}

性能有何不同?在这样的例子中,它可能不可见,但在复杂的程序中,它会重要吗?我是否应该接受例外的实践,而不是那时呢?

2 个答案:

答案 0 :(得分:2)

异常情况下使用例外情况,当您发生的事情没有发现时,以及无法做出明智的恢复。

否则,请使用if-then并返回状态代码。

就性能而言,与退货相比,异常会产生巨大的开销。调用方法并捕获异常(如果它不起作用)是冗长而烦人的。

void myOperation() {
   step1();
   step2();
   step3();
}

在这个例子中,当任何步骤失败时,异常是优选的,整个操作无论如何都会失败,所以我不想处理任何这些。

void myOperation(String number) {
    int n;
    try { 
        n = Integer.parse(number);
    } catch (NumberFormatException e) {
        n = DEFAULT;
    }
    doThings(n);
}

在这种情况下,必须捕获异常是令人讨厌的,因为我希望字符串无效并且有合理的替代方案。该异常使代码变得缓慢而冗长。

答案 1 :(得分:0)

  

性能差异是什么?

带有异常的版本肯定会运行得更慢,并且会产生处理异常,创建对象,填充堆栈跟踪等的开销。

  

在这样的示例中,它可能不可见,但在复杂的程序中,   会有关系吗?我是否应该接受例外的实践,而不是那时呢?

在复杂的程序中,没有人使用这种处理可能的空指针异常,并且它实际上是java中的反模式,所以如果你想用null保存,你应该像if(x)那样非空检查!= null)或断言。

另外,我建议您阅读更多有关java中的异常以及已检查/未检查异常之间的差异等内容。

PS here是关于空检查的好主题。