已检查vs未经检查的exception

我研究过:然而,对于未经检查的exception,编译器不会强制客户端程序员捕获exception或在throws子句中声明它。 实际上,客户端程序员可能甚至不知道可能抛出exception。 例如,String的charAt()方法抛出StringIndexOutOfBoundsException

这是什么意思?

根据该代码,没有必要在代码中放置try catch块,但我已经看到编译器强制将代码放入try catch块。

我很困惑他们到底是什么?

未经检查的exception是扩展RuntimeException类的exception。 编译器永远不会强制您捕获此类exception或强制您使用throws关键字在方法中声明它。 检查所有其他exception类型(不扩展RuntimeException ),因此必须声明它们被抛出和/或捕获。

当您希望方法的调用者(即API的用户)明确处理API中的exception情况时,将使用已检查的exception。 当您认为该调用能够针对该exception情况执行某些有意义的操作时会声明已检查的exception,例如重试调用,滚动更改或将其转换为某些用户可读的错误消息。

如果您认为调用可以对exception做任何有用的事情(特别是当它表示错误或API的错误用法时),则应该取消选中该exception。 此外,具有太多已检查exception的API可能令人烦恼(例如,尝试使用javareflectionAPI =)

你的问题到底是什么? 编译器不应该(也不会)强制您尝试/捕获未经检查的exception,这与它们完全不同。

一般的想法是,经检查的例外是您可以预见的,但可能基于您无法控制的输入以及您必须处理的输入。 未经检查的exception通常代表程序中的错误。

有许多人认为在Java平台上检查exception是一个错误,他们只是非常谨慎地使用它们或者根本不使用它们。 您可以通过搜索谷歌阅读有关此辩论的更多信息。

这是因为,

  1. 未经检查的exception不是程序员错误的结果。 相反,它们是严重的后果,我们(程序员)预计不会对它做太多。
  2. 在Checked Exception的情况下,由于程序员的错误而产生的exception通常可由程序员自己解决。

检查以下链接:

为什么运行时exception未选中?
已检查vs未经检查的exception?

  • 由于编程错误,会生成未经检查的exception。 它们并不总是被程序捕获,因为它们通常需要程序员进行修改才能修复。
  • 已检查的exception不是编程错误的结果。 相反,它们发生在程序的正常操作中。 一个例子是无法打开文件时抛出的IOException。 因为即使程序没有任何问题也会发生这些exception,因此有必要告诉程序如何处理exception。