为什么有些Java异常可以不处理?

为什么有些Java异常可以不处理?,java,exception,exception-handling,Java,Exception,Exception Handling,在这段代码中,IDE或编译器会抱怨createNewFile引发了一个未经处理的异常,我们需要捕获它以允许代码编译 然而,parseInt也抛出了一个异常NumberFormatException,但我们不需要捕获它,尽管这似乎是一个好主意。为什么我们不需要捕获该异常?规则是扩展RuntimeException的异常不需要捕获 NumerFormatException扩展了IllegalArgumentException,后者扩展了RuntimeException 从: 运行时异常可能发生在程序

在这段代码中,IDE或编译器会抱怨createNewFile引发了一个未经处理的异常,我们需要捕获它以允许代码编译


然而,parseInt也抛出了一个异常NumberFormatException,但我们不需要捕获它,尽管这似乎是一个好主意。为什么我们不需要捕获该异常?

规则是扩展RuntimeException的异常不需要捕获

NumerFormatException扩展了IllegalArgumentException,后者扩展了RuntimeException

从:

运行时异常可能发生在程序中的任何地方,在典型的程序中,它们可能非常多。必须在每个方法声明中添加运行时异常会降低程序的清晰度。因此,编译器不要求您捕获或指定运行时异常,尽管您可以


规则是不需要捕获扩展RuntimeException的异常

NumerFormatException扩展了IllegalArgumentException,后者扩展了RuntimeException

从:

运行时异常可能发生在程序中的任何地方,在典型的程序中,它们可能非常多。必须在每个方法声明中添加运行时异常会降低程序的清晰度。因此,编译器不要求您捕获或指定运行时异常,尽管您可以

一切最终都会得到处理。如果您没有捕获它,那么当异常逃逸主方法时,JVM将捕获它并将其写入stderr

有些异常,如NullPointerException和NumberFormatException,是未检查的,这意味着程序员不需要捕获它们。您不能要求捕获所有可能的NullPointerException,将它们添加到方法签名将是毫无意义的

与NullPointerException一样,NumberFormatException是程序员错误的结果,这意味着您对解析方法的输入做出了错误的假设。在某些情况下,不清楚为什么会检查某些异常而不检查其他异常

未选中的异常往往是不可恢复的。它们可能表示某些外部资源中断,也可能表示程序员出错;有些事情出了大问题,没有必要继续,最好的办法是取消当前的工作,回到安全的地方,重新组织

一切最终都会得到处理。如果您没有捕获它,那么当异常逃逸主方法时,JVM将捕获它并将其写入stderr

有些异常,如NullPointerException和NumberFormatException,是未检查的,这意味着程序员不需要捕获它们。您不能要求捕获所有可能的NullPointerException,将它们添加到方法签名将是毫无意义的

与NullPointerException一样,NumberFormatException是程序员错误的结果,这意味着您对解析方法的输入做出了错误的假设。在某些情况下,不清楚为什么会检查某些异常而不检查其他异常


未选中的异常往往是不可恢复的。它们可能表示某些外部资源中断,也可能表示程序员出错;有些事情出了大问题,没有必要继续,最好的办法是取消当前的工作,回到安全的地方,重新组织

内森,谢谢你给我一个很好的答案,很抱歉我不能选择多个。你提到了NullPointerException,我可以看出,如果我们必须捕捉到每一个可能的异常,就像Amaud引用的那样,它会降低程序的清晰度。Nathan,谢谢你给出了一个很好的答案,很抱歉,我不能选择多个。你提到了NullPointerException,我可以看出,如果我们必须捕捉每一个可能的异常,正如Amaud引用的那样,它会降低程序的清晰度。
    public static void main(String[] args) {
    File file = new File("foobar"); 
    file.createNewFile();

    String baz = "baz";     
    int myInt = Integer.parseInt(baz);
}