我可以说JVM exceptions
是未经检查的异常和Programmatic exceptions
检查的异常吗?因为看起来JVM异常是在运行时抛出的,所以无法检查......
谢谢
我可以说JVM exceptions
是未经检查的异常和Programmatic exceptions
检查的异常吗?因为看起来JVM异常是在运行时抛出的,所以无法检查......
谢谢
您所问的内容可能涉及两个不同的区别。JVM 运行时抛出的异常扩展自,Error
而编程异常扩展自Exception
. 未经检查的编程异常从RuntimeException
. 因此,未经检查的异常有两个不同的类层次结构。请注意,JVM/程序的区别只是约定:您确实可以从 Java 代码中抛出您想要的任何异常类。
还要确保将 JVM 异常与 JDK 异常(标准 Java 库抛出的异常)区分开来。没有检查 JVM 异常,但检查了很多 JDK 异常。
至于检查/未检查的区别,编译器会强制您提前声明您的方法可能显式抛出的所有检查异常,或者通过调用可能抛出它们的方法来声明。对于未经检查的异常,不会进行此类检查。
对于 JVM 异常,您可能会想到 Java VM 抛出的异常,而 Programmatic 异常是 Java 程序员代码抛出的异常。
Java VM 抛出的大多数异常实际上是由 Java VM 中标准库中的 java 代码抛出的。您可以下载此 java 代码,您将看到这些库以与编写 java 程序的程序员相同的方式抛出异常。一个标准的 java 程序员也可以以同样的方式抛出同样的异常。
Java VM 也可能抛出 Java 错误。错误不是异常,但可以像异常一样被抛出和捕获。只有虚拟机应该抛出错误。
我可以说 JVM 异常是未经检查的异常,而编程异常是已检查的异常吗?
首先,“JVM 异常”不是标准术语。(而且 SCJP6 谈论 JVM 抛出的异常这一事实并不能使您的术语正确。您引用的 SCJP6 文本是描述性地使用这些词......而不是试图定义术语。)
您的问题的答案是否定的。许多“程序化”异常都是未经检查的。例如,NumberFormatException
未选中。
因为看起来JVM异常是在运行时抛出的,所以无法检查......
这种逻辑也说不通。所有异常都在运行时抛出。这不是“已检查”与“未检查”的含义。已检查异常和未检查异常之间的真正区别在于,已检查异常必须在方法签名中捕获或声明。对于未经检查的异常,您也不必这样做。
现在碰巧 JVM 本身抛出的所有异常都是未经检查的。但这更多是关于触发异常的“事件”的性质。它们通常是某些 Java 代码中的错误或不可恢复的 JVM 故障的结果。这些不是应用程序通常可以从中恢复的东西,因此使它们不受检查只是避免了源代码中一些不必要的冗长(或更糟)。