Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定异常是在编译时检查还是在运行时检查?_Java_Exception_Exception Handling - Fatal编程技术网

Java 如何确定异常是在编译时检查还是在运行时检查?

Java 如何确定异常是在编译时检查还是在运行时检查?,java,exception,exception-handling,Java,Exception,Exception Handling,我正在查看RuntTimeException类,它没有在编译时签入。为什么类在编译时不检查而在运行时不检查呢 RuntimeException类扩展了Exception类,但仍然未选中?怎么做 编译器如何决定是在runtime还是compile时间中检查此类 类未被检查,您在这里讨论的是异常。一个例外是编译时是否被选中。必须在可能引发已检查异常的方法的签名中捕获或声明已检查异常。未经检查的异常不需要任何特殊处理。规则如下: 扩展RuntimeException(包括RuntimeExcepti

我正在查看
RuntTimeException
类,它没有在编译时签入。为什么类在编译时不检查
而在运行时不检查

  • RuntimeException
    类扩展了
    Exception
    类,但仍然未选中?怎么做
  • 编译器如何决定是在
    runtime
    还是
    compile
    时间中检查此类

  • 类未被检查,您在这里讨论的是异常。一个例外是编译时是否被选中。必须在可能引发已检查异常的方法的签名中捕获或声明已检查异常。未经检查的异常不需要任何特殊处理。

    规则如下:

  • 扩展
    RuntimeException
    (包括
    RuntimeException
    本身)的所有异常类都是未选中的异常
  • 扩展
    Exception
    的所有其他类都是选中的异常-不包括
    RuntimeException
    及其以下所有内容
  • 错误
    下面的所有内容也未选中
  • “Checked”表示Java编译器将检查您的代码是否通过捕获异常来处理异常,或者可能发生异常的方法是否有一个
    throws
    子句来指示此方法可能引发这种类型的异常

    请参阅Oracle的Java教程中的详细说明

    这两个问题的答案都是:它是这样工作的,因为它是在Java语言规范中指定的


    RuntimeException类扩展了Exception类,但仍然未选中?怎么做

    这是一种设计选择。Java语言的设计者认为RuntimeException和Error以及扩展它们的类在定义上都是未经检查的异常。所以这只是语言的一条规则

    编译器如何决定是在运行时还是编译时检查此类


    编译器检查抛出的异常的类型。如果是RuntimeException或错误,则该异常将被取消选中。

    RuntimeException类扩展了exception类,但仍然被取消选中?怎么做?你说的“怎么做”是什么意思?它只是按照规则工作。这没有理由不起作用,因为
    RuntimeException
    扩展了
    Exception
    。该语言的规则是Error和RuntimeException,它们的子类是未检查的异常。检查所有其他异常。是的,
    RuntimeException
    扩展了
    Exception
    ,这正是您永远不应该捕获整个
    异常的原因--除非您以前处理过
    RuntimeException
    ,否则Java编译器如何确定它是基于名称还是某个类定义的,该类定义使RuntimeException处于未选中状态。我是否可以在不扩展RunttimeeException的情况下创建一个类似于RuntimeException的类。@Shane是的,java编译器中的代码必须以某种方式将RuntimeException名称识别为特殊名称。不,你不能自己做这样的事情(至少不能不先在Java编译器中修改代码)@Shane不,不是这样的。未检查的异常是RuntimeException或错误。
                   | Throwable |
                   +-----------+
                    /         \
                   /           \
          +-------+          +-----------+
          | Error |          | Exception |
          +-------+          +-----------+
           /  |  \           / |        \
         \________/        \______/      \
          unchecked                   checked
                    +------------------+
                    | RuntimeException |
                    +------------------+
                      /   |    |      \
                    \_________________/
    
                       unchecked