为什么要检查和取消选中例外命名?

时间:2012-10-27 21:15:58

标签: java

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

4 个答案:

答案 0 :(得分:12)

如果你调用一个被声明为抛出 checked 异常的方法(例如IOException),编译器将检查你是否正在捕获它或声明你重新抛出它。同样,为了首先抛出这样一个检查过的异常,编译器检查你已经将它声明为方法签名的一部分。

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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

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

C#将未经检查的异常作为默认值。 Java开发人员现在也采用了这种惯例。

答案 3 :(得分:1)

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

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

检查所有其他异常,因为编译器必须捕获或抛出它们。