是否有任何关键字或特殊的代码语法,如果我查看它,我会知道这里使用了未经检查的异常或正在使用检查的异常?
通过阅读以前提出过这个问题的帖子,在我看来,知道它是检查还是未检查的唯一方法是查看异常是否扩展了 Exception 或 RuntimeException。
这真的是唯一知道的方法吗?因为我认为编写未检查和检查异常的语法也应该不同,但我不确定要查找什么。
是否有任何关键字或特殊的代码语法,如果我查看它,我会知道这里使用了未经检查的异常或正在使用检查的异常?
通过阅读以前提出过这个问题的帖子,在我看来,知道它是检查还是未检查的唯一方法是查看异常是否扩展了 Exception 或 RuntimeException。
这真的是唯一知道的方法吗?因为我认为编写未检查和检查异常的语法也应该不同,但我不确定要查找什么。
来自 Java 文档。它说“异常类和任何不是 RuntimeException 子类的子类都是检查异常。” 所以你的答案是肯定的。但请记住,错误也是一种未经检查的异常。
检查异常需要在方法或构造函数的throws子句中声明,如果它们可以被方法或构造函数的执行抛出并传播到方法或构造函数边界之外。从你可以使用Java中的“isInstance()”函数来查看是否特定异常属于某个类。在您的情况下,如果异常是 RuntimeException。如果是,则未选中,如果否,则选中。
您还可以查找“java.lang.Object.getClass()”,它可以告诉您对象的确切运行时类。
我可以考虑单独处理它们的另一种方式。您可以捕获 RuntimeException 和 Error,然后捕获不是 RuntimeException 实例的所有其他异常。
在实践中,当您希望程序中出现异常并且您希望调用者处理它时,会使用已检查异常。
例如
当您从 FileSystem 读取文件时,该文件可能不存在,因此IOException
将被抛出,调用者必须通过try..catch
. 这样的异常只是您程序的异常流程,根本不是错误。
当您不认为它根本不可能发生时,使用未经检查的异常。
例如
当您比较 2 个字符串时a.equals(b)
,您不会期望a
为 null,因此您不会检查是否NullPointerException
会被抛出。如果它真的抛出了一个未经检查的异常,那么你的程序中有一个错误。