在java中使用Scanner类时是否需要处理异常。你怎么解释这个?
我对此没有正确的想法。任何人都可以帮助我吗?
答案 0 :(得分:1)
任何抛出异常的方法的使用都应该处理,重新抛出或重新声明(如果它是已检查的异常)它们用于下一级别,以便选择如何处理它。
在Scanner
中,如果采用nextDouble()
方法,则会根据扫描仪的状态抛出各种异常。你必须要关心它
但是关心的方式取决于你的程序逻辑。
尽管如此,Scanner
中的大多数例外情况都是RuntimeException
,这意味着您不需要明确在代码中捕获它们。假设您在main
,如果发生异常,它将由JVM在顶层处理。在这种情况下,您的程序将退出错误代码和堆栈跟踪。
Scanner
中已检查且您必须以某种方式处理的唯一例外情况是从文件构造Scanner
时。 IOException
和FileNotFoundException
不容忽视。
当您阅读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作为输入,则不会显示任何错误。但是,与此同时,您应该检查输入是否符合您对用户的要求,因此始终建议使用异常处理。