最近我接受了采访,面试官问我有关异常处理的问题。我给出了典型的未检查答案。然后他问我应该处理运行时异常吗?我说不,然后有人问我们如果我们得到一个NullPointerException,你会把它发送给用户吗?
我很困惑。所以我要找的是,我们是否应该捕获运行时异常?提前致谢。
答案 0 :(得分:2)
处理任何可预测的RuntimeException
的最佳方法是捕获它并生成有关可能原因发生的事件以及系统期望用户下一步做什么的用户友好信息。
假设您有一个项目为用户提供基于UI的计算器。现在,如果用户进入零'的分区,理想情况下应该发生什么呢?指令?假如你没有检查0分母(当然这是不可取的),你的程序将抛出ArithmeticException。你应该怎么处理?您应该抓住它并让用户知道他输入了系统不期望的输入,即
You cannot divide by zero. Please enter a non zero denominator!
如果它是一个API并且要被另一个应用程序使用,那么我要做的是将运行时异常包装到一个自定义的API特定异常中并从那里抛出它,以便实现者可以使用该信息并处理它以合适的方式。 e.g。
public int divide() throws InvalidArgumentsException
答案 1 :(得分:0)
您可以通过实施UncaughtExceptionHandler:
来捕获应用程序中的RuntimeException
个类
Thread.setDefaultUncaughtExceptionHandler(Thread t, Throwable e) -> {
// log Exception to file, send to server ecc, you can check which exception was thrown and act accordingly...
// you can still re-throw the exception here as if this block did not exist
});
此方法应该捕获所有未被捕获的Exceptions
,即使是其他Thread
实例抛出的那些,因此只使用一个实现是安全的。
你提问:
我们是否应该捕获运行时异常
取决于;您不希望整个Banking Application Server崩溃,只是因为它无法在文件系统中找到文件。
与此同时,RuntimeException
通常会发生,因为代码中存在缺陷。 NullPointerException
可以避免,以及许多其他人......