Laa*_*nya 10 java exception-handling runtimeexception checked-exceptions
我研究过:然而,对于未经检查的异常,编译器不会强制客户端程序员捕获异常或在throws子句中声明它.事实上,客户端程序员可能甚至不知道可能抛出异常.例如,StringIndexOutOfBoundsException
由String的charAt()
方法抛出.
这是什么意思?
根据该代码,不需要在代码中放置try catch块,但我已经看到编译器强制将代码放入try catch块中.
我很困惑他们到底是什么?
rod*_*ion 19
未经检查的异常是扩展RuntimeException
类的异常.编译器永远不会强迫您捕获此类异常或强制您使用throws
关键字在方法中声明它.检查所有其他异常类型(不扩展RuntimeException
),因此必须声明抛出和/或捕获.
当您希望方法的调用者(即API的用户)明确处理API中的异常情况时,将使用已检查的异常.当你相信的通话将能够做一些有意义的特殊情况下,如重试呼叫checked异常声明,滚变回或将其转换为一些用户可读的错误消息.
如果您认为有什么有用的电话可以做的异常(特别是当它代表了一个错误,或者您的API的错误使用),然后异常应该是选中.此外,具有太多已检查异常的API可能会令人烦恼(例如,尝试使用java反射API =)
IOException
是当无法打开文件时抛出的 。即使程序没有任何问题,也会发生这些异常。因此,有必要告诉程序如何处理异常。NullPointerException
当在null
对象上读取值时抛出 a 。因此,未经检查的异常表示需要程序员手动修复的问题。程序崩溃以避免错误行为是合理的,因此不需要 try-catch 块(但可能需要提供缓解措施,例如向用户显示错误)。你的问题到底是什么?编译器不应该(也不会)强制您尝试/捕获未经检查的异常,这将与它们的本质背道而驰。
一般的想法是,检查的异常是您可以预见的,但可能基于您无法控制且必须处理的输入。未经检查的异常通常代表程序中的错误。
有很多人认为检查异常是 Java 平台中的一个错误,他们很少使用或根本不使用它们。您可以通过搜索谷歌了解有关这场辩论的更多信息。
归档时间: |
|
查看次数: |
10467 次 |
最近记录: |