据我所知,在java中,抛出异常的函数不应该在上面的函数中没有try和catch或减速的情况下被编译。那么为什么这个代码是合法的,并且不会崩溃呢?
public static void main(String[] args) {
Integer.parseInt("33");
}即使Integer.parseInt()抛出: NumberFormatException -如果字符串不包含可解析的整数。
发布于 2013-01-10 18:38:10
NumberFormatException扩展了RuntimeException,这是一个不需要捕获的未检查异常。

摘录自Java教程
因为Java编程语言不需要方法来捕获或指定未检查的异常(RuntimeException、Error及其子类),所以程序员可能倾向于编写只抛出未检查的异常的代码,或者使所有的异常子类继承自RuntimeException。这两种快捷方式都允许程序员编写代码,而无需担心编译器错误,也无需费心指定或捕获任何异常。
NumberFormatException Api Docs
发布于 2013-01-10 18:48:03
从Java language spec
未检查的异常类是运行时异常类和错误类。
换句话说,每个Throwable都是一个RuntimeException或子类,每个Throwable都是一个Error或子类。它们可以被捕获,但捕获或throws不是强制性的。
检查的异常类是除未检查的异常类之外的所有异常类。也就是说,检查的异常类是Throwable的所有子类,而不是RuntimeException及其子类和Error及其子类。
换句话说,每隔一个Throwable。它们必须被抛出(throws)或被接住。
NumberFormatException扩展了RuntimeException,因此它是未检查的异常类之一,并且不需要在方法中捕获或抛出。
发布于 2013-01-10 18:38:51
NumberFormatException是所谓的未检查异常,因为它是RuntimeException的一个子类型。
在java中,未检查异常也可以在没有try-catch的情况下编译。
https://stackoverflow.com/questions/14255880
复制相似问题