据我所知,在java中抛出异常的函数不应该在没有try and catch或在它上面的函数中减速的情况下编译。那么为什么这段代码是合法的并且不粉碎呢?
public static void main(String[] args) {
Integer.parseInt("33");
}
即使 Integer.parseInt() 抛出:NumberFormatException - 如果字符串不包含可解析的整数。
NumberFormatException
extendsRuntimeException
这是一个未经检查的异常,不需要被捕获。
摘自 Java 教程
因为 Java 编程语言不需要方法来捕获或指定未经检查的异常(RuntimeException、Error 及其子类),所以程序员可能会倾向于编写仅引发未经检查的异常的代码,或者使其所有异常子类都继承自 RuntimeException。这两种快捷方式都允许程序员编写代码,而无需担心编译器错误,也无需指定或捕获任何异常。 全文
来自Java 语言规范:
未经检查的异常类是运行时异常类和错误类。
换句话说,每个 Throwable,即一个RuntimeException
或一个子类,每个 Throwable,即一个Error
或一个子类。它们可以被捕获,但捕获或throws
不是强制性的。
已检查异常类是除未检查异常类之外的所有异常类。也就是说,检查的异常类都是 Throwable 的子类,除了 RuntimeException 及其子类和 Error 及其子类。
换句话说,每隔一个Throwable
。他们必须被扔(throws
)或被抓住。
NumberFormatException
扩展RuntimeException
,因此它是未经检查的异常类之一,不必被捕获或抛出为方法。
NumberFormatException
是所谓的未经检查的异常,因为它是RuntimeException
.
在java中,未经检查的异常也可以在没有try-catch的情况下编译
NumberFormatException是RuntimeException
未选中的,因此不需要被捕获。
如果您不知道选中/未选中Exception
是什么,请查看 [文档] 2
据我所知,在java中抛出异常的函数不应该在没有try和catch的情况下编译
exception
对了,改成Checked exception
.
通过以下内容对这些有一个清晰的认识:
NumberFormatException 是一个 RuntimeException。RuntimeExceptions 是未经检查的异常。您所说的对于已检查的异常是强制性的,但对于未检查的异常则不是必需的。
几个链接:
http ://www.javapractices.com/topic/TopicAction.do?Id=
129 http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html
Java中的异常有两种:已检查异常和未检查异常。
检查异常是需要try-catch
阻止或声明的异常。
未经检查的异常不需要那个。NumberFormatException
是未经检查的异常。
基本上,未经检查的 Exception 派生自RuntimeException
,因此不需要声明或try-catch
阻止。
这是一个未经检查的异常。RuntimeException 类及其子类是未经检查的异常类。这些异常可以发生在代码中的任何位置。因此,您可以自行捕获该异常并继续执行