java - 请解释Java中的RuntimeException以及应该在哪里使用

标签 java exception runtimeexception

我正在关注 SO 上的精彩讨论,标题为:The case against checked exceptions ,但我无法理解应该在哪里使用 RuntimeException 以及它与普通异常及其子类有何不同。谷歌搜索给了我一个复杂的答案,即它应该用于处理编程逻辑错误并且应该在正常情况下不应发生异常时抛出,例如在 switch-case 构造的默认 block 中。

你能在这里更详细地解释一下 RuntimeException 吗?谢谢。

最佳答案

I am unable to follow where exactly RuntimeException should be used

这可能是因为您正在查看一个论点,即人们对这一点持不同意见。

and how it is different from normal Exceptions and its subclasses.

非常简单:Exception 的所有子类(RuntimeException 及其子类除外)都被检查,即编译器将拒绝代码,除非您在方法签名中捕获或声明它们。但是,RuntimeException 的子类未经检查

Googling gave me a complex answer, that is, it should be used to deal with programming logic errors and should be thrown when no Exception should normally occur, such as in the default block of switch-case construct.

这是传统智慧,它说对于程序可以有效处理的所有事情,您应该使用已检查的异常,因为这样编译器将强制您处理它们。相反,程序通常不能有效地处理程序员的错误,因此不必检查它们。这就是 Java 标准 API 使用 RuntimeException 的方式。

您链接到的讨论是由一些人(包括我)的观点引发的,他们认为检查异常会导致错误代码,因此不应使用。由于您无法在编译器中禁用异常检查,因此唯一的方法是 RuntimeException 及其子类。

IMO 支持这种观点的一个观察是,“仅对程序员错误使用未经检查的异常”的传统智慧实际上主要是向后推理的合理化:没有代码安全原因编译器不应该强制你处理程序员的错误。然而,像 NullPointerExceptionArrayIndexOutOfBoundsException 之类的东西几乎可以在任何地方出现,如果检查了这些,就没有人愿意用 Java 编程了。因此,语言设计者不得不为那些,嗯,异常(exception),并使它们不受检查。为了解释这一点,他们提出了“未经检查的异常是针对程序员错误的”故事。

关于java - 请解释Java中的RuntimeException以及应该在哪里使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3540613/

相关文章:

java - 将带有自定义调色板的 Java Image 对象保存到 GIF 文件的最佳方法

JAVA Telegram bots api 获取更新时出错 : Conflict: terminated by other long poll or webhook

java - 无法进入 Hive Shell

Android Activity 未在某些设备上启动(错误膨胀类)

android - 将菜单项设置为从代码中检查

Java JFrame 设置自定义不透明度

python - 无法捕获线程程序中的异常

c++ - try catch 语法构造函数

python - 在 python 中捕获 "socket.timeout The read operation timed out"

java - 如何从 Executors 中正确捕获 RuntimeExceptions?