检查与未检查的异常

问题描述:

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

是什么意思?

根据该代码,没有必要把代码中的try catch块, ,但我已经看到编译器的力量把代码放在try catch块中。

我很困惑他们究竟是什么?

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

总的想法是,检查异常是您可以预见的,但可能基于您无法控制且必须处理的输入。 未检查的异常通常会表示程序中的错误。

有很多人认为在Java平台中检查异常是一个错误,他们只是非常谨慎地使用它们,或者根本不使用它们。您可以通过搜索谷歌阅读更多关于这场辩论。

未检查的例外是那些延伸RuntimeException类的例外。编译器绝不会强制您捕获此类异常,或强制您使用throws关键字在方法中声明它。所有其他异常类型(不扩展RuntimeException)都会被检查,因此必须声明为抛出和/或捕获。

当您希望方法的调用者(即您的API的用户)明确处理API中的异常情况时,使用检查异常。如果您认为该呼叫能够对该特殊情况做一些有意义的事情,例如重试呼叫,回滚或将其转换为用户可读的错误消息,则会声明检查的异常。

如果您认为这个调用没有什么用处,这个调用可以处理异常(特别是当它代表错误或API的错误用法时),那么应该取消选中异常。此外,有太多的checked异常的API,可恼人与编程(例如尝试使用Java反射API =)

+10

从“错误”扩展的异常也未选中。 – stolsvik 2011-01-09 16:33:29

这是因为,

  1. unchecked异常不是程序员的过错造成的。相反,它们是我们(程序员)不希望对它做太多工作的严重后果。
  2. 在检查异常的情况下,它是由于程序员的错误而产生的异常&经常可以由程序员自己解决。

检查以下几个环节:

Why RunTime Exceptions are unchecked ?
Checked vs Unchecked Exception ?

+5

这是相反的方式。当一个Excpetion是程序员的错误时,它应该被取消选中。 “捕捉”错误而不是修复它是毫无意义的。如果它不是程序员错误,但是由外部参数引起(例如网络错误),应该检查它。 – Tomas 2012-05-23 09:25:07

+2

**误导!**有足够的代表编辑的人请解决这个问题吗? – ADTC 2014-06-26 16:14:12

  • 未检查异常,因为一个编程错误的产生。它们并不总是被程序所接受,因为它们通常需要程序员修改才能修复。
  • 检查异常不是编程错误的结果。相反,它们发生在程序的正常运行中。一个例子是当文件无法打开时抛出的IOException。因为即使程序没有错误也会发生这些异常,所以有必要告诉程序如何处理异常。