1

当在 Integer 类构造函数中传递字符值而不是整数值时,以下代码将引发NumberFormatException

class Wrap
{
    public static void main(String...args)
    {
        Integer j=new Integer("s");
        System.out.println(j);
    }
}

当用户输入字符值而不是整数值时,以下代码将引发InputMismatchException

import java.util.Scanner;

class User
{
    public static void main(String...args)
    {
        Scanner obj=new Scanner(System.in);
        int i=obj.nextInt();
        int j=obj.nextInt();
        System.out.println("sum of numbers input by user");
        System.out.println(i+j);
    }
}

这两个异常似乎都是在相同的场景中引发的,那么它们有什么不同呢?

4

2 回答 2

4

让我们看看这两个异常类的规范:

InputMismatchException特定于Scanner. 它表示无效类型,不一定是无效数字。NumberFormatException专门用于尝试将非数字字符串转换为数字。

公共类 InputMismatchException 扩展 NoSuchElementException

由 Scanner 抛出以指示检索到的令牌与预期类型的​​模式不匹配,或者令牌超出预期类型的​​范围。

公共类 NumberFormatException 扩展 IllegalArgumentException

抛出以指示应用程序已尝试将字符串转换为其中一种数字类型,但该字符串没有适当的格式。

于 2013-09-07T05:51:25.053 回答
0

根据 Java API,NumberFormatException是“抛出以指示应用程序已尝试将字符串转换为数字类型之一,但该字符串没有适当的格式”,而InputMismatchException是“由扫描程序抛出以指示检索到的令牌与预期类型的​​模式不匹配,或者令牌超出预期类型的​​范围。”

基本上,第一种情况会引发异常,因为字符串不代表int. 请注意,我们并不关心字符串是如何到达那里的。第二种情况给出了一个特定于输入的异常,因为它是由Scanner.

于 2013-09-07T05:51:41.297 回答