已选中与未选中异常

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

它是什么意思?

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

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


答案 1

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

当您希望方法的调用方(即 API 的用户)显式处理 API 中的异常情况时,将使用已检查的异常。当您认为调用能够对该异常情况执行有意义的操作(如重试调用、回滚更改或将其转换为某个用户可读的错误消息)时,将声明已检查的异常。

如果您认为调用对异常没有任何用处(特别是当它表示错误或 API 的错误用法时),则应取消选中异常。此外,具有太多已检查异常的API可能很烦人(例如,尝试使用java反射API=)


答案 2
  • 已检查的异常对于处理程序正常运行中发生的事件非常有用。例如,当无法打开文件时会引发 。即使程序没有问题,也会发生这些异常。因此,有必要告诉程序如何处理异常。IOException
  • 未经检查的异常对于识别代码中的缺陷非常有用。例如,在对象上读取值时会引发 a。因此,未检查异常表示需要程序员手动修复的问题。为了避免错误行为,程序崩溃是合理的,因此不需要 try-catch 块(但为了提供缓解措施,例如向用户显示错误,可能是可取的)。NullPointerExceptionnull