Scanner中的异常处理

时间:2015-04-04 08:26:17

标签: java

在java中使用Scanner类时是否需要处理异常。你怎么解释这个?

我对此没有正确的想法。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

任何抛出异常的方法的使用都应该处理,重新抛出或重新声明(如果它是已检查的异常)它们用于下一级别,以便选择如何处理它。

Scanner中,如果采用nextDouble()方法,则会根据扫描仪的状态抛出各种异常。你必须要关心它 但是关心的方式取决于你的程序逻辑。

尽管如此,Scanner中的大多数例外情况都是RuntimeException,这意味着您不需要明确在代码中捕获它们。假设您在main,如果发生异常,它将由JVM在顶层处理。在这种情况下,您的程序将退出错误代码和堆栈跟踪。

Scanner已检查且您必须以某种方式处理的唯一例外情况是从文件构造Scanner时。 IOExceptionFileNotFoundException不容忽视。


当您阅读double时,作为(滥用)异常的使用示例,您可能会想要这样做:

public static void testScanDoubleWithException() {
    Scanner sin = new Scanner(System.in);
    System.out.println("Enter a double: ");
    while (true) {
        try {
            double d = sin.nextDouble(); // Throw if not a double
            System.out.println("Read double value: "+d);
            break;
        }
        catch (InputMismatchException e) {
            System.out.println("Invalid double, shoot again:");
            sin.nextLine(); // consume bad input
        }
    }
    sin.close();
}

但是Scanner类提供了更简单/明确的方式:

public static void testScanDouble() {
    Scanner sin = new Scanner(System.in);
    System.out.println("Enter a double: ");
    while (!sin.hasNextDouble()) {
        System.out.println("Invalid double, shoot again:");
        sin.nextLine();
    }
    double d = sin.nextDouble();
    System.out.println("Read double value: "+d);
    sin.close();
}

答案 1 :(得分:0)

Java支持异常处理,以便我们可以避免在应用程序中出现不需要的行为。在任何交易中,如果我们预见到任何不需要的行为,我们应该处理异常。 Scanner类可以根据所使用的操作类型抛出任何异常,例如Runtime,illegalArgument,numberformat等。因此,作为一种好的做法,我们应该始终单独捕获所有特定的异常并且执行得更好。

答案 2 :(得分:0)

是。例如,如果您使用Scanner对象来读取文件,则应该处理FileNotFoundException,否则会出错。但是,如果您只是使用System.in作为输入,则不会显示任何错误。但是,与此同时,您应该检查输入是否符合您对用户的要求,因此始终建议使用异常处理。