我研究过:但是,对于未经检查的异常,编译器不会强制客户端程序员捕获异常或在 throws 子句中声明它。事实上,客户端程序员甚至可能不知道异常可能会被抛出。例如,由 String 的方法StringIndexOutOfBoundsException
抛出。charAt()
这是什么意思?
根据该代码,无需将 try catch 块放入代码中,但我已经看到编译器强制将代码放入 try catch 块中。
我很困惑他们到底是什么?
我研究过:但是,对于未经检查的异常,编译器不会强制客户端程序员捕获异常或在 throws 子句中声明它。事实上,客户端程序员甚至可能不知道异常可能会被抛出。例如,由 String 的方法StringIndexOutOfBoundsException
抛出。charAt()
这是什么意思?
根据该代码,无需将 try catch 块放入代码中,但我已经看到编译器强制将代码放入 try catch 块中。
我很困惑他们到底是什么?
未经检查的异常是扩展RuntimeException
类的异常。编译器永远不会强迫您捕获此类异常或强迫您在使用throws
关键字的方法中声明它。检查所有其他异常类型(不扩展RuntimeException
),因此必须声明为被抛出和/或捕获。
当您希望方法的调用者(即 API 的用户)显式处理 API 中的异常情况时,使用检查的异常。当您认为调用能够对这种异常情况执行一些有意义的事情时,就会声明检查的异常,例如重试调用、回滚更改或将其转换为一些用户可读的错误消息。
如果您认为该调用对异常没有任何用处(尤其是当它表示错误或 API 的错误使用时),则应取消选中该异常。此外,带有太多已检查异常的 API 可能会令人讨厌(例如,尝试使用 java 反射 API=)
IOException
是当文件无法打开时抛出的。即使程序没有任何问题,也会发生这些异常。因此,有必要告诉程序如何处理异常。NullPointerException
上读取值时抛出 a 。null
因此,未经检查的异常表示需要程序员手动修复的问题。为了避免错误行为,程序崩溃是合理的,因此不需要 try-catch 块(但可能需要提供缓解措施,例如向用户显示错误)。你的问题到底是什么?编译器不应该(也不会)强制您尝试/捕获未经检查的异常,这将违背它们的本质。
一般的想法是,检查的异常是您可以预见的,但可能基于您无法控制且您必须处理的输入。未经检查的异常通常代表程序中的错误。
有很多人认为检查异常在 Java 平台中是一个错误,他们只是非常谨慎地使用它们或根本不使用它们。你可以通过搜索谷歌阅读更多关于这场辩论的信息。
这是因为,
检查以下链接:
所有异常都是运行时间的一部分,而不是编译时间。有两种异常检查异常和未检查异常。已检查异常的示例是 IO 异常、ClassNotFound 异常,未检查异常的示例是运行时异常。在检查异常的情况下,错误或警告消息在编译时出现,以便用户在运行时使用 throws 关键字处理它,该关键字用于将异常抛出到默认的 catch 机制系统。但是如果出现未经检查的异常,编译时不会出现警告。
在编写代码期间要检查或处理或应注意的异常称为已检查异常。例如: 1. 我们有 FileNotFoundException --> 当我们编写一些与文件类相关的代码时会发生这种情况。绝对有文件不存在的可能性。在这种情况下,为了处理它们,我们肯定会被迫处理这些异常。2. 还有一个例子是 ParseException ,它会在我们处理日期函数时发生。
这些是在编码期间可选处理的异常。是否处理它们取决于我们。如果我们未能处理它们,则在执行期间有可能出现运行时错误。例如:我们有一个叫做 NullPointerException、ArithemeticException、NosSuchElementFoundException 等的东西。这些就像我们甚至不必处理它们的可选事物。甚至 jvm 或编译器也不建议我们处理它们。**
简单来说,
即使在创建自定义例外时也使用相同的规则。