繁体   English   中英

扫描仪中的异常处理

[英]Exception handling in Scanner

在Java中使用Scanner类时是否有必要处理异常。 您如何解释呢?

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

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

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

也就是说, Scanner中的大多数异常都是RuntimeException ,这意味着您不需要在代码中显式捕获它们。 假设您位于main ,如果发生异常,那么它将由JVM在顶层处理。 在这种情况下,您的程序将退出并显示错误代码和stacktrace。

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();
}

Java支持异常处理,因此我们可以避免应用程序中的不良行为。 在任何事务期间,如果我们预见到任何不良行为,我们都应该处理异常。 扫描程序类可以根据所使用的操作类型(例如运行时,非法参数,数字格式等)抛出任何异常,因此,作为一种好的做法,我们应始终单独捕获所有特定的异常并具有更好的执行力。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM