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

これら 2 つの例外クラスの仕様を見てみましょう。

InputMismatchExceptionに固有ですScanner。必ずしも無効な数値ではなく、無効なタイプを示します。NumberFormatException非数値文字列を数値に変換しようとする場合に固有です。

public class InputMismatchException extends NoSuchElementException

取得したトークンが予想される型のパターンと一致しないこと、またはトークンが予想される型の範囲外であることを示すために Scanner によってスローされます。

public class NumberFormatException extends IllegalArgumentException

アプリケーションが文字列をいずれかの数値型に変換しようとしたが、文字列の形式が適切でないことを示すためにスローされます。

于 2013-09-07T05:51:25.053 に答える
0

Java API によると、NumberFormatExceptionは「アプリケーションが文字列を数値型の 1 つに変換しようとしたが、文字列が適切な形式を持っていないことを示すためにスローされます」であり、InputMismatchExceptionは「スキャナによって取得したトークンが予想されるタイプのパターンと一致しないか、トークンが予想されるタイプの範囲外であることを示します。」

基本的に、最初のシナリオでは、文字列が . を表していないため、例外がスローされますint。文字列がどのようにそこに到達したかは気にしないことに注意してください。2 番目のシナリオでは、 によってスローされているため、入力に固有の例外が発生しますScanner

于 2013-09-07T05:51:41.297 に答える