Java 何时捕获代码中的运行时异常?

Java 何时捕获代码中的运行时异常?,java,exception,exception-handling,Java,Exception,Exception Handling,当用java编程时,作为程序员,我是否应该考虑捕获RuntimeException呢?捕获RuntimeException的原因与捕获任何异常的原因相同:您计划对它做些什么。也许您可以纠正导致异常的任何原因。也许您只是想使用不同的异常类型重新刷新 然而,捕获并忽略任何异常都是非常糟糕的做法。这就是我所能想到的 如果您想在出现问题时向最终用户显示一条好消息,请捕获运行时异常并记录它。然后在屏幕上显示一些漂亮的信息,而不是爆发性的错误 要将特定于框架的CheckedExceptions包装为特定于应

当用java编程时,作为程序员,我是否应该考虑捕获RuntimeException呢?

捕获RuntimeException的原因与捕获任何异常的原因相同:您计划对它做些什么。也许您可以纠正导致异常的任何原因。也许您只是想使用不同的异常类型重新刷新


然而,捕获并忽略任何异常都是非常糟糕的做法。

这就是我所能想到的

  • 如果您想在出现问题时向最终用户显示一条好消息,请捕获运行时异常并记录它。然后在屏幕上显示一些漂亮的信息,而不是爆发性的错误
  • 要将特定于框架的CheckedExceptions包装为特定于应用程序的RuntimeExceptions。最好使用RuntimeException作为您的自定义异常

  • 是的:只要你能并且想从中恢复过来

    许多常见异常继承自
    RuntimeException
    ,根据具体情况,每个异常都可能恢复,也可能无法恢复。
    RuntimeException
    类本身并不意味着必须捕获或不捕获异常


    例如,您可能有一个库方法,在某些输入上抛出
    IllegalArgumentException
    。如果适用于您的程序,您可以捕获此异常并以某种方式进行恢复,例如尝试不同的输入,或向用户解释操作无法继续的原因。

    基于用户验证,如果要向用户显示自定义消息,请转到
    RuntimeException

    将您的自定义消息打包,然后将其抛出

    throw new RuntimeException("Invalid userName/Password !");
    

    基本上,您只希望在不能允许应用程序爆炸的情况下捕获一个。更详细地描述了这一点,但这里引用了一段话来总结:

    "If a client can reasonably be expected to recover from an exception, make it a 
    checked exception. If a client cannot do anything to recover from the exception,
    make it an unchecked exception".  
    

    由于未经检查的异常基本上只是代码中的bug,实际上应该只在无法对其采取任何措施的情况下抛出,因此您希望捕获的唯一实时异常是当您无法允许应用程序崩溃时。

    有点旧,但是。。。我不确定你是否真的应该在没有检查的情况下这样做。它们实际上只应该在没有其他方法可以做的情况下抛出,基本上只是表示代码中的bug。在这种情况下,捕获一个错误的唯一真正原因是保护您的应用程序不被破坏(如果可能的话)。同意,如果没有其他验证代码的方法,则抛出异常!我不知道你说的验证代码是什么意思?我的意思是,唯一应该抛出运行时异常的时间是当没有什么可以做的时候。例如,BufferOverflow、BufferUnderflow、ClassCast、ConcurrentModifications等都是运行时异常。这些与验证代码没有任何实际关系。如果它们发生了,您实际上无法对它们采取任何措施,除非尽可能尝试恢复,或者让您的应用程序死掉。这取决于你的应用程序在做什么。