检查与未检查的异常
我研究过:但是,对于未经检查的异常,编译器不会强制客户端程序员捕获异常或将其声明在throws子句中。事实上,客户程序员甚至可能不知道可能抛出异常。例如StringIndexOutOfBoundsException
由String的charAt()
方法抛出。检查与未检查的异常
是什么意思?
根据该代码,没有必要把代码中的try catch块, ,但我已经看到编译器的力量把代码放在try catch块中。
我很困惑他们究竟是什么?
你的问题到底是什么? 编译器不应该(也不会)强制您尝试/捕获未经检查的异常,这将与它们完全相反。
总的想法是,检查异常是您可以预见的,但可能基于您无法控制且必须处理的输入。 未检查的异常通常会表示程序中的错误。
有很多人认为在Java平台中检查异常是一个错误,他们只是非常谨慎地使用它们,或者根本不使用它们。您可以通过搜索谷歌阅读更多关于这场辩论。
未检查的例外是那些延伸RuntimeException
类的例外。编译器绝不会强制您捕获此类异常,或强制您使用throws
关键字在方法中声明它。所有其他异常类型(不扩展RuntimeException
)都会被检查,因此必须声明为抛出和/或捕获。
当您希望方法的调用者(即您的API的用户)明确处理API中的异常情况时,使用检查异常。如果您认为该呼叫能够对该特殊情况做一些有意义的事情,例如重试呼叫,回滚或将其转换为用户可读的错误消息,则会声明检查的异常。
如果您认为这个调用没有什么用处,这个调用可以处理异常(特别是当它代表错误或API的错误用法时),那么应该取消选中异常。此外,有太多的checked异常的API,可恼人与编程(例如尝试使用Java反射API =)
这是因为,
- unchecked异常不是程序员的过错造成的。相反,它们是我们(程序员)不希望对它做太多工作的严重后果。
- 在检查异常的情况下,它是由于程序员的错误而产生的异常&经常可以由程序员自己解决。
检查以下几个环节:
Why RunTime Exceptions are unchecked ?
Checked vs Unchecked Exception ?
- 未检查异常,因为一个编程错误的产生。它们并不总是被程序所接受,因为它们通常需要程序员修改才能修复。
- 检查异常不是编程错误的结果。相反,它们发生在程序的正常运行中。一个例子是当文件无法打开时抛出的IOException。因为即使程序没有错误也会发生这些异常,所以有必要告诉程序如何处理异常。
从“错误”扩展的异常也未选中。 – stolsvik 2011-01-09 16:33:29