我在面试中被问到:
Is it good practice to handle unchecked exceptions with a try-catch block or should we leave them unhandled? Should we write most of our code between try-catch?
寻找一些令人满意的理由...
最佳答案
这取决于我们所指的未经检查的异常。在很多情况下,您可以预见可能会抛出未经检查的异常。我经常捕获未经检查的异常的一个简单示例是 NumberFormatException
。如果您可以绝对确定在使用 Integer.parseInt(String) 时该字符串将是一个数字,那么不检查这一点是可以的,但它可能非常罕见,否则为什么不存储它首先是一个Integer
?您可能正在获取用户输入的字符串,在这种情况下,可能值得捕获该字符串以以适当的方式处理无效输入(例如要求他们重新输入输入)。
另一方面,有一些未经检查的异常,您应该能够避免捕获这些异常。 ArrayIndexOutOfBoundsException 就是一个例子。在尝试访问数组的一部分之前,您应该确保您知道它可用。这通常可以通过根据您尝试访问的索引检查数组的大小来实现。允许抛出异常然后以“检查”的方式捕获它是低效的,因为创建异常会产生开销。
关于将所有代码包装在 try-catch 中,我不禁感觉到这样的暗示:您期望代码在这样做时会中断,并且您不应该处理您不知道的问题的原因。如果你的意思是从字面上将你的程序包装在 try {...} catch (Exception ex) {...}
中,我看不出它有任何用处,因为你要做的就是 JVM 所做的当异常被一直抛出堆栈时,为你做。您可以做一些处理,也许可以尝试恢复,但尝试恢复什么?如果您只是捕获Exception
,您不知道出了什么问题需要恢复。
有时,将代码包装在大型 try-catch 中可能会很有用(如果您不希望系统的一小部分最终破坏整个系统),但总的来说,通常有一些方法可以首先避免这些事情发生,或者更好地处理它们,而不是将其包装在一个巨大的 try-catch 中。
关于java - 我们应该在 Java 中处理未经检查的异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265536/