当前位置: 首页 > 面试题库 >

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

高自怡
2023-03-14
问题内容
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()方法中甚至没有声明它,我们如何知道是否需要捕获?

问题答案:

文献: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)


 类似资料:
  • 嘿StackOverflow社区, 关于抛出异常。一般什么时候抛出和异常,什么时候抓取? 假设我遇到了这样的情况,我不得不退出,因为发生了一些问题,我无法从它中恢复过来。我是投还是接? 我现在就这么做: 这样做对吗?如果我只是抛出异常会更合适吗?对不起,我是例外的新手:)

  • 是否有可能在Delphi中构建一个代码片段,使假设的EChuckNorrisException无法捕获? 对于Java编程语言,我刚刚发现在Uncatchable ChuckNorriseException中,答案是肯定的

  • 问题 你想捕获一个异常后抛出另外一个不同的异常,同时还得在异常回溯中保留两个异常的信息。 解决方案 为了链接异常,使用 raise from 语句来代替简单的 raise 语句。 它会让你同时保留两个异常的信息。例如: >>> def example(): ... try: ... int('N/A') ... except ValueError as e:

  • 问题 怎样捕获代码中的所有异常? 解决方案 想要捕获所有的异常,可以直接捕获 Exception 即可: try: ... except Exception as e: ... log('Reason:', e) # Important! 这个将会捕获除了 SystemExit 、 KeyboardInterrupt 和 GeneratorExit 之外的所有异常。

  • 问题 你在一个 except 块中捕获了一个异常,现在想重新抛出它。 解决方案 简单的使用一个单独的 rasie 语句即可,例如: >>> def example(): ... try: ... int('N/A') ... except ValueError: ... print("Didn't work") ...

  • 我有这样的情况,即活动调用管理器类调用提供者。 活动->管理器(带有asyncTask的方法)->提供程序 我应该如何将捕获的异常发送回活动?