3

据我所知,在java中抛出异常的函数不应该在没有try and catch或在它上面的函数中减速的情况下编译。那么为什么这段代码是合法的并且不粉碎呢?

public static void main(String[] args) {
    Integer.parseInt("33");
}

即使 Integer.parseInt() 抛出:NumberFormatException - 如果字符串不包含可解析的整数。

4

8 回答 8

14

NumberFormatExceptionextendsRuntimeException这是一个未经检查的异常,不需要被捕获。

在此处输入图像描述

摘自 Java 教程

因为 Java 编程语言不需要方法来捕获或指定未经检查的异常(RuntimeException、Error 及其子类),所以程序员可能会倾向于编写仅引发未经检查的异常的代码,或者使其所有异常子类都继承自 RuntimeException。这两种快捷方式都允许程序员编写代码,而无需担心编译器错误,也无需指定或捕获任何异常。 全文

NumberFormatException API 文档

于 2013-01-10T10:38:09.663 回答
2

来自Java 语言规范

未经检查的异常类是运行时异常类和错误类。

换句话说,每个 Throwable,即一个RuntimeException或一个子类,每个 Throwable,即一个Error或一个子类。它们可以被捕获,但捕获或throws不是强制性的。

检查异常类是除未检查异常类之外的所有异常类。也就是说,检查的异常类都是 Throwable 的子类,除了 RuntimeException 及其子类和 Error 及其子类。

换句话说,每隔一个Throwable。他们必须被扔(throws)或被抓住。

NumberFormatException 扩展RuntimeException,因此它是未经检查的异常类之一,不必被捕获或抛出为方法。

于 2013-01-10T10:48:02.813 回答
1

NumberFormatException是所谓的未经检查的异常,因为它是RuntimeException.

在java中,未经检查的异常也可以在没有try-catch的情况下编译

于 2013-01-10T10:38:50.777 回答
0

NumberFormatExceptionRuntimeException未选中的,因此不需要被捕获。

如果您不知道选中/未选中Exception是什么,请查看 [文档] 2

于 2013-01-10T10:39:14.397 回答
0

据我所知,在java中抛出异常的函数不应该在没有try和catch的情况下编译

exception对了,改成Checked exception.

通过以下内容对这些有一个清晰的认识:

有效的 Java 异常

例外

于 2013-01-10T10:39:47.900 回答
0

NumberFormatException 是一个 RuntimeException。RuntimeExceptions 是未经检查的异常。您所说的对于已检查的异常是强制性的,但对于未检查的异常则不是必需的。

几个链接:
http ://www.javapractices.com/topic/TopicAction.do?Id=
129 http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

于 2013-01-10T10:39:51.007 回答
0

Java中的异常有两种:已检查异常和未检查异常。

检查异常是需要try-catch阻止或声明的异常。

未经检查的异常不需要那个。NumberFormatException是未经检查的异常。

基本上,未经检查的 Exception 派生自RuntimeException,因此不需要声明或try-catch阻止。

于 2013-01-10T10:39:53.563 回答
0

这是一个未经检查的异常。RuntimeException 类及其子类是未经检查的异常类。这些异常可以发生在代码中的任何位置。因此,您可以自行捕获该异常并继续执行

于 2013-01-10T10:40:21.247 回答