如何知道我的代码使用的是已检查异常还是未检查异常?

How to know if my code is using a checked or an unchecked exception?

是否有任何关键字或特殊语法的代码,如果我查看它,我会知道这里使用的是未检查的异常还是使用了检查的异常?

从阅读以前问过这个问题的以前的帖子来看,在我看来,知道它是检查还是未检查的唯一方法是查看异常是扩展 Exception 还是 RuntimeException。

真的只有这样才能知道吗?因为我认为编写未经检查和检查的异常的语法也应该不同,但我不确定要查找什么。

来自 Java 文档。它说 "The class Exception and any subclasses that are not also subclasses of RuntimeException are checked exceptions." 所以你的回答是肯定的。但请记住 Error 也是一种未经检查的异常。

如果已检查的异常可以通过方法或构造函数的执行抛出并传播到方法或构造函数之外,则需要在方法或构造函数的 throws 子句中声明它们 boundary.From 您可以使用 "isInstance()" Java 中的函数来查看特定异常是否属于某个 class。在您的情况下,如果异常是 RuntimeException。是则不勾选,否则勾选

您还可以查找 "java.lang.Object.getClass()",它可以告诉您对象的确切运行时间 class。

另一种方法我可以考虑单独处理它们。您可以捕获 RuntimeException 和 Error,然后捕获不是 RuntimeException 实例的所有其他异常。

实际上,当您预计程序中会出现异常并且希望调用者处理它时,会使用已检查的异常。

例如

当你从 FileSystem 读入一个文件时,有可能文件不存在,所以会抛出 IOException 并且调用者必须通过 try..catch 来处理它。这样的异常只是你程序的一个异常流程,根本不是bug。

当你不认为它根本不可能发生时,使用未经检查的异常。

例如

当你比较 2 个字符串时,a.equals(b),你不会期望 a 为 null,所以你不会检查 NullPointerException 是否会被抛出。如果它真的抛出一个未经检查的异常,那么你的程序就有一个错误。