我正在查看RuntTimeException
类,并且未在编译时检查。为什么一个类在编译时不是checked
而在运行时不是checked
?
https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html
| Throwable |
+-----------+
/ \
/ \
+-------+ +-----------+
| Error | | Exception |
+-------+ +-----------+
/ | \ / | \
\________/ \______/ \
unchecked checked
+------------------+
| RuntimeException |
+------------------+
/ | | \
\_________________/
unchecked
RuntimeException
类扩展Exception
类但仍未选中?怎么样?。 runtime
或compile
时间内检查此类?答案 0 :(得分:1)
未检查类,您在此处讨论异常。编译时是选中还是未选中是一个例外。必须在可能抛出的方法的签名中捕获或声明已检查的异常。未经检查的例外不需要任何特殊处理。
答案 1 :(得分:1)
规则如下:
RuntimeException
(包括RuntimeException
本身)的所有异常类都是未选中例外。Exception
的所有其他类都是已选中例外 - 不包括RuntimeException
以及其后的所有内容。Error
以及下面的所有内容也未经检查。"经过"意味着Java编译器将检查您的代码是通过捕获它来处理异常,还是可能发生异常的方法具有throws
子句以指示此方法可能抛出此类异常。
请参阅Oracle的Java教程中的The Catch or Specify Requirement,其中详细解释了这一点。
你的两个问题的答案是:它的工作原理是这样的,因为它的定义与Java语言规范中的相同。
答案 2 :(得分:1)
RuntimeException类是否扩展了Exception类但仍未选中?怎么样?
这是一个设计选择。 Java语言的设计者决定RuntimeException和Error,以及扩展它们的类根据定义是未经检查的异常。所以它只是一种语言规则。
编译器如何决定是在运行时还是编译时检查此类?
编译器检查抛出的异常的类型。如果是RuntimeException或Error,则取消选中该异常。