小编典典

我应该捕获方法抛出的所有异常吗?

java

try{
   output.format("%d %s %s %.2f%n", input.nextInt(),
        input.next(),input.next(),input.nextDouble());
} catch(FormatterClosedException formatterClosedException){
    System.err.println("Error writing to file. Terminating.");
    break;
} catch(NoSuchElementException noSuchElementException){
    System.err.println("Invalid input. Please try again.");
    input.nextLine();
}

该方法format(String format, Object... args)Formatter类抛出2
exceptionIllegalFormatExceptionFormatterClosedException,但在我的书上面的代码捕获NoSuchElementExceptionFormatterClosedException

  1. 为什么代码会捕获NoSuchElementException但没有捕获IllegalFormatException
  2. 如果NoSuchElementException在线文档的Formatter类format()方法中甚至没有声明它,我们如何知道是否需要捕获?

阅读 228

收藏
2020-11-30

共1个答案

小编典典

文献java.util.NoSuchElementException是一个
RuntimeException 可以由不同类的在Java中像迭代器,枚举,被抛出 扫描仪 或StringTokenizer的。

在你的情况是Scanner。它不是从format方法。

仅仅是在安全方面(如果不给下一个输入,然后抛出此异常)。

显示演示的示例代码

public class NoSuchElementExceptionDemo{
    public static void main(String args[]) {
        Hashtable sampleMap = new Hashtable();
        Enumeration enumeration = sampleMap.elements();
        enumeration.nextElement();  //java.util.NoSuchElementExcepiton here because enumeration is empty
    }
}

Output:
Exception in thread "main" java.util.NoSuchElementException: Hashtable Enumerator
        at java.util.Hashtable$EmptyEnumerator.nextElement(Hashtable.java:1084)
        at test.ExceptionTest.main(NoSuchElementExceptionDemo.java:23)
2020-11-30