为什么命名的例外被选中和取消选中?

为什么Java中的两个exception类型名为“checked”和“unchecked”? 这些名字背后的原因是什么?

如果调用声明为抛出已检查exception的方法(例如IOException ),编译器将检查您是捕获它还是声明重新抛出它。 同样,为了首先抛出这样一个检查过的exception,编译器会检查你是否已将其声明为方法签名的一部分。

基本上,它有点像类型检查,除了可以通过方法抛出exception。

编译器不会对未经检查的exception执行任何检查 – 因此可以通过任何方法抛出它们,而不会使用声明它们的方法。

Java编译器检查已检查的exception:它检查您是否捕获它们或在方法签名中声明它们。

“已检查”表示您必须捕获它或声明您的方法将其抛入签名中。 方法的用户必须捕获已检查的exception。 如果不这样做将导致编译器错误。

“未选中”表示您和方法的用户都不需要捕获exception。 您不需要在方法签名的throws子句中声明它。

在最早的版本中,Java经常选择第一个。

C#使未经检查的exception成为默认值。 Java开发人员现在也开始采用这种约定。

在Java中,您可以抛出任何Throwable 。 Throwable有两个子类: ErrorException 。 当抛出Error时,出现了一个严重的问题,通常与您的代码关系不大。 编译器不会检查此类exception,并且是未经检查的exception的示例。

Exception有一个名为RuntimeException的子类,这些子类通常是指示代码中的错误的exception,并且通常可以在大多数代码中的许多地方出现。 示例是NullPointerExceptionArrayIndexOutOfBoundsException等。这些也是未选中的,因为您会抓住这些代码来丢弃代码。

由编译器检查所有其他exception ,您必须捕获或抛出它们。