为什么IOException不起作用,但转到InputMismatchException

时间:2015-07-21 05:57:37

标签: java exception exception-handling ioexception

我不明白为什么这个简单的方法不会捕获异常但抛出另一个异常。弹出的异常错误是java.util.InputMismatchException

我能做些什么来抓住IOException

public class Throwing {

    public static void main(String[] args) {
        try {
            int x = getInt();
            System.out.println(x);
        } catch (IOException a) {
            a.printStackTrace();
        }
    }

    public static int getInt() throws IOException {
        int a = 0;
        System.out.println("Enter an interger: ");
        Scanner input = new Scanner(System.in);
        a = input.nextInt();
        return a;
    }
}

1 个答案:

答案 0 :(得分:1)

如果您查看JavaDocs for Scanner#nextInt,您会看到它能够抛出InputMismatchException等等

  

但目标是我试图抛出IOException而不是InputMismatch。我可以对我的代码做些什么来帮助我扔掉它?

您需要捕获任何可能的异常并抛出一个新的IOException,并将旧的Exception作为原因。

public static int getInt() throws IOException
{
    int a = 0;
    System.out.println("Enter an interger: ");
    Scanner input = new Scanner(System.in);
    try {
        a = input.nextInt();
    } catch (InputMismatchException ime) {
        throw new IOException("Could not get int from input", ime);
    }
    return a;
}

这是恕我直言,这不是最好的主意,因为您可能希望InputMismatchException与创建IOException Scanner区别对待>