try / catch性能java中的不可抛出代码

时间:2014-05-01 21:30:27

标签: java exception-handling

由于不会在try块内部引发异常的方法会对以下代码产生任何负面的性能影响吗?

String user;
try {
    user = SomeHelper.getUserName();    //Does not throw anything explicitly

    if (SomeHelper.isSomething(user)) { //Does not throw anything explicitly
        user.doSomeSafeThing(this);     //Does not throw anything explicitly
    }
    else {
        user.doOtherSafeThing(this);    //Does not throw anything explicitly
    }

    SomeOtherHelper.methodThatCanBlow(User.getCredentials(context)); //This will throw exception
} catch (Exception e) {
    e.printStackTrace();
}

我相信编译器不会重构任何这些代码,因为这些方法中的任何一个都可能抛出NullPointerException,或者另一个RuntimeException并且实际上被catch块捕获。

所以我想问一下这个问题,以下代码会更有效吗?

String user;

user = SomeHelper.getUserName();    //Does not throw anything explicitly

if (SomeHelper.isSomething(user)) { //Does not throw anything explicitly
    user.doSomeSafeThing(this);     //Does not throw anything explicitly
}
else {
    user.doOtherSafeThing(this);    //Does not throw anything explicitly
}
try {
    SomeOtherHelper.methodThatCanBlow(User.getCredentials(context)); //This will throw exception
} catch (Exception e) {
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:4)

  

由于不会在try块内部引发异常的方法会对以下代码产生任何负面的性能影响吗?

不,它不会产生任何性能影响,但是:

  • 我通常会在try块中放入最少的代码
  • 我会尽量避免抓住Exception,而是抓住特定的例外
  • 只是打印堆栈跟踪非常很少是正确的“处理”方式和您捕获的异常。通常你想中止整个操作,无论是什么组成的