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

在Java中,为什么要检查和取消检查两种类型的异常。

在Java中,为什么要检查和取消检查两种类型的异常。,java,Java,在Java中,为什么要检查和取消检查两种类型的异常。而选中的异常则迫使我们将方法包装在try..catch中。如果没有检查这些异常,我们无论如何都会抛出错误,那么该怎么办呢?最初的意图是,检查的异常与开发人员预期能够处理的情况相关,而未检查的异常则是开发人员可能无法处理的情况(内存不足、内部JVM错误)。检查异常的效果是开发人员必须考虑它——不能因为代码无法编译而忽略它 如果未处理未经检查的异常(不在任何地方),那么它将关闭JVM。实际上,如果应用程序没有捕获未检查的异常,大多数应用程序宿主框架

在Java中,为什么要检查和取消检查两种类型的异常。而选中的异常则迫使我们将方法包装在try..catch中。如果没有检查这些异常,我们无论如何都会抛出错误,那么该怎么办呢?

最初的意图是,检查的异常与开发人员预期能够处理的情况相关,而未检查的异常则是开发人员可能无法处理的情况(内存不足、内部JVM错误)。检查异常的效果是开发人员必须考虑它——不能因为代码无法编译而忽略它

如果未处理未经检查的异常(不在任何地方),那么它将关闭JVM。实际上,如果应用程序没有捕获未检查的异常,大多数应用程序宿主框架(Web服务器、应用程序容器)将捕获未检查的异常,而不是让JVM关闭。例如,如果servlet中的代码引发未经检查的异常导致整个Web服务器关闭,这将是不幸的


在我看来,最初将JVM基本类中的异常划分为“已检查”和“未检查”类别有点武断。例如,我从未真正理解为什么基本的字符串到数字转换函数会抛出未经检查的NumberFormatException,而开发人员实际上应该处理格式不正确的数据。尽管如此,事实就是这样。

对不起,这个答案有很多错误。在第一段中,您混淆了异常和错误(至少OutOfMemory是一个错误),这是一个不同的主题。在第二段中,您声明任何未捕获的异常(和错误)都将导致JVM关闭。这不是真的,它只会导致出现异常的线程结束,因此完整的Web服务器不应该因此而关闭(当然,如果所有处理线程都因为这种影响而丢失,那么最终会导致Web服务器无法正常工作,但您仍然必须自己重新启动它)我把这个问题理解为问Java中为什么会有这些不同类型的异常,而不是技术上的细微区别是什么。技术区别记录在平台规范等中。OutOfMessageError处于“未选中”状态,您可以从方法中抛出它,而无需声明要抛出它。您关于线程的观点是正确的,但在应用程序宿主环境中,允许未经检查的异常(或任何类型的可丢弃异常)传播到JVM而不进行处理通常不是好的做法。