Java 调用带有选中异常的方法

Java 调用带有选中异常的方法,java,exception,exception-handling,runtimeexception,Java,Exception,Exception Handling,Runtimeexception,正如我所知,如果方法抛出异常,Java编译器将强制该方法的调用方捕获该异常 我看到parseInt抛出NumberFormatException: public static int parseInt(String s) throws NumberFormatException { return parseInt(s,10); 因此,为什么我可以称之为不捕获异常: String str = "5"; int n = Integer.parseInt(str); 由于NumberFor

正如我所知,如果方法抛出异常,Java编译器将强制该方法的调用方捕获该异常

我看到
parseInt
抛出
NumberFormatException

public static int parseInt(String s) throws NumberFormatException {
    return parseInt(s,10);
因此,为什么我可以称之为不捕获异常:

String str = "5";
int n = Integer.parseInt(str);

由于
NumberFormatException
扩展了
RuntimeException
-运行时异常被视为“未选中”,请参见
RuntimeException
的:

RuntimeException是的超类 那些可以抛出的异常 在系统正常运行期间 Java虚拟机

不需要在中声明方法 它的任何子类 可能引发的运行时异常 在方法执行期间,但是 没有被抓住


下面将解释此功能的含义及其存在的原因。重要的区别在于,不需要捕获从运行时异常扩展而来的任何异常,而任何其他异常都需要捕获。扩展RuntimeException的异常可以在任何时候抛出,例如NullPointerException或ConcurrentModificationException,因此它们不能期望您尝试捕获所有这些异常。

正如Bert所说,它们不是“已检查的异常”,所以try/catching是可选的。“throws”语句仅作为“提示”给出。如果你愿意,请抓住它。这是一个最近提出的问题,在回答中有很多关于检查和未检查异常之间区别的好信息: