Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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_Runtimeexception - Fatal编程技术网

Java 为什么运行时异常是未检查的异常?

Java 为什么运行时异常是未检查的异常?,java,exception,runtimeexception,Java,Exception,Runtimeexception,通常,如果任何类扩展了异常,它将成为选中异常运行时异常还扩展了异常。那么它是如何未经检查的异常的 对于这种特殊情况,他们是否有一个自定义检入编译器 编辑:我对已检查的v/s未检查的异常及其利弊等有正确的想法。我不接受他们在回答中的差异 是的。除了错误、运行时异常及其(直接或间接)子类之外,任何可丢弃的都是选中的异常 但是,这些是由编译器检查的,而不是由JVM检查的;选中的异常是编译时功能,而不是运行时功能。(更新:我现在看到您已将问题编辑为指定“编译器”而不是“JVM”。☺) 更详细地说,它不

通常,如果任何类扩展了
异常
,它将成为选中异常<代码>运行时异常还扩展了异常。那么它是如何
未经检查的异常的

对于这种特殊情况,他们是否有一个自定义检入编译器


编辑:我对已检查的v/s未检查的异常及其利弊等有正确的想法。我不接受他们在回答中的差异

是的。除了
错误
运行时异常
及其(直接或间接)子类之外,任何
可丢弃的
都是选中的异常

但是,这些是由编译器检查的,而不是由JVM检查的;选中的异常是编译时功能,而不是运行时功能。(更新:我现在看到您已将问题编辑为指定“编译器”而不是“JVM”。☺)


更详细地说,它不像是任何类型的“检查异常”接口。逻辑只是硬编码:“任何异常类都是检查异常,除非它是
RuntimeException
Error
”的子类型。

这里有一个有用的链接:

它解释了未检查和已检查之间的区别,并给出了一些示例


“这有点令人困惑,但请注意RuntimeException(未选中)本身就是Exception(已选中)的一个子类。”

它在规范中明确指出:

RuntimeException
及其所有子类统称为运行时异常类

未选中的异常类是运行时异常类和错误类

选中的异常类是除未选中异常类之外的所有异常类。也就是说,选中的异常类是除RuntimeException及其子类和Error及其子类之外的所有Throwable子类

因此,是的,编译器根据异常的类型明确地知道运行时异常

异常由Throwable类(Object的直接子类)或其子类之一的实例表示

Throwable及其所有子类统称为异常类

请注意,Throwable的子类不得为泛型(§8.1.2)

Exception和Error类是Throwable的直接子类

异常是普通程序可能希望从中恢复的所有异常的超类

Error是所有异常的超类,普通程序通常不希望从中恢复

Error及其所有子类统称为Error类

类错误是Throwable的一个独立子类,与类层次结构中的异常不同,它允许程序使用惯用语“}catch(Exception e){”(§11.2.3)捕获所有可能恢复的异常,而不捕获通常不可能恢复的错误

类RuntimeException是Exception的一个直接子类。RuntimeException是所有异常的超类,这些异常在表达式求值期间可能由于多种原因引发,但仍然可以从中恢复

RuntimeException及其所有子类统称为运行时异常类。

未检查的异常类是运行时异常类和错误类。


选中的异常类是除未选中异常类之外的所有异常类。也就是说,选中的异常类是除RuntimeException及其子类和Error及其子类之外的所有Throwable子类。

运行时异常称为未选中异常,因为它在编译时未被选中。除了
ERROR
RuntimeException
之外,throwable下的所有内容都被选中为异常。在程序中添加运行时异常将降低程序的清晰度

class Divide {
    public static void main(String [] args){
        int a = 10;
        int b = 0;
        int c = a/b; // This will throw run time exception due to unexpected value of b.
    }
}

请阅读此链接

为什么我们不能检查运行时异常?因为我们知道可能存在NullPointerException,所以我们应该检查它。有什么想法吗?@UnKnown:不,你不希望你编写的每个方法都必须捕获或声明NullPointerException…那太糟糕了。这意味着从概念上讲,检查和声明之间没有区别还有未检查的异常?只是实现有区别?@UnKnown:这取决于你所说的“概念上”是什么意思真的。正如编译器检查的
FileNotFoundException
一样,它被称为检查异常,但编译器不检查NullPointerException,它被称为未检查异常。但两者都是异常。正如您提到的
否,您不希望您编写的每个方法都必须捕获或声明NullPointerException
这就是为什么Java没有将其作为检查异常,但Java可以。