【问题标题】:How to handle Runtime Exception in Real life projects [duplicate]如何在现实生活项目中处理运行时异常[重复]
【发布时间】:2017-11-24 09:18:43
【问题描述】:

最近我在面试,面试官问我关于异常处理的问题。我给出了典型的检查未检查答案。然后他问我是否应该处理运行时异常?我说不,然后有人问如果我们得到一个 NullPointerException 假设,你会把它发送给用户吗?

我很困惑。所以我正在寻找的是,我们是否应该捕获运行时异常?

  1. 如果是,我们该怎么做?
  2. 如果否,那么我们是否向用户显示 java.lang.nullpointerException ?

提前致谢。

【问题讨论】:

  • 如果您不希望应用程序崩溃,您应该这样做。我建议您阅读异常处理的基础知识
  • 检查here

标签: java exception-handling runtimeexception


【解决方案1】:

处理任何可预测的RuntimeException 的最佳方法是捕获它并生成用户友好的信息,说明发生了什么可能的原因以及系统期望用户接下来做什么。

假设您有一个为用户提供基于 UI 的计算器的项目。现在,如果用户输入“除零”指令,理想情况下应该发生什么?假设您不检查 0 分母(这当然是不可取的),您的程序将抛出 ArithmeticException。你应该如何处理?您应该抓住它并让用户知道他输入了系统未预期的输入,即

You cannot divide by zero. Please enter a non zero denominator!

如果它是一个 API 并且要被另一个应用程序使用,我会做的是将运行时异常包装到一个自定义的 API 特定异常中并从那里抛出它,以便实现者可以使用该信息并处理它以合适的方式。例如

public int divide() throws InvalidArgumentsException

【讨论】:

    【解决方案2】:

    您的普通用户不会知道 NullPointerException 是什么或它是如何/为什么发生的。您通常会向用户显示一个更友好的错误,也许他们可以提供一个错误代码来帮助识别错误。

    应用程序还可以将 NullPointerError 与堆栈跟踪一起保存到文件中,以便开发人员可以准确地看到错误发生的位置。

    【讨论】:

    • 没错,我不需要向用户显示发生了 NPE。但是如何向用户显示友好的错误呢? NPE 只是一个例子。可以有 N 个运行时异常。那么我该如何在代码中实现相同的功能?
    【解决方案3】:

    您可以通过实现UncaughtExceptionHandler 在您的应用程序中捕获RuntimeExceptionclasses:

    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's 可以避免,还有很多其他的...

    【讨论】:

      猜你喜欢
      • 2011-02-17
      • 2010-10-04
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多