【问题标题】:Java - Write one method to handle all exceptionsJava - 编写一种方法来处理所有异常
【发布时间】:2015-09-09 12:41:04
【问题描述】:

我试图同时处理我的代码中的异常而不重复它。

我在“系统”类上有很多方法,我不想在所有这些方法中都写“Try Catch”因为我相信还有其他方法可以避免重复。 有任何想法吗? 我要处理的异常是(InputMismatchException)。

编辑:更多信息以备不时之需。 我有几种方法,用户需要输入“Int”(使用扫描仪),这就是我需要处理的。

【问题讨论】:

  • 不知道如何笼统地回答这个问题。
  • 你能显示一些代码sn-ps吗?
  • 我会劝阻你正在尝试什么,但如果你真的想要这个,有一种方法:只需总是在每个方法签名之后加上throws Exception。 (例如public void myMethod(String param) throws Exception { ... })。但这基本上意味着,只要您的程序出现异常,您的整个应用程序就会关闭。
  • 我强烈反对throws Exception。它将隐藏您实际上需要以特定方式(例如InterruptedException)处理特定异常的事实,您的方法现在可能不会抛出这些异常,但可能会随着代码的发展而发生。
  • @Laurenzanoster 看看我对这个案例的回答吧!你走在正确的轨道上,但你可以毫无例外地处理这个问题。

标签: java exception


【解决方案1】:
【解决方案2】:

我一般不建议这样做:只需将所有方法都抛出异常并在一个地方处理上层的所有异常。这仅适用于某些测试或当您想要快速开发某些东西而不应该是正常方法时。

您可以在此处找到更多信息: https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html

还有一些关于你应该如何做的规则: Throws or try+catch

【讨论】:

  • 哦,我明白了,所以如果我只是去每个方法并做try-catch那里会更好吗?
【解决方案3】:

这是您想尝试的另一种方法,它不会隐式处理异常。

正如您的 cmets 中所述,您正在通过 Scanner 类接收用户的输入。由于Scanner 允许用户输入他们想要的任何值,而您只想处理整数,因此您可能想要(或者您已经在使用)Scanner.nextInt() 方法。 Tutorial here.

如果您只需要在一个地方处理InputMismatchExceptionthis question has an answer that handles 所有这些异常。

或者,就像 question explores您可以通过始终向用户询问 int 直到用户正确输入整数来避免处理异常,修改如下: p>

Scanner sc = new Scanner(System.in); //your scanner instance
System.out.print("Enter a number.");
while (!sc.hasNextInt()) {
        System.out.println("Enter a whole number");
        sc.next();
}
int x = sc.nextInt();

其中的while 循环的作用是每当扫描仪没有下一个整数时总是重复,因此!sc.hasNextInt() 条件,并提示用户输入另一个带有消息的数字和sc.next(),这是一个等待用户再次输入的方法。

一旦用户输入一个数字,hasNextInt() 方法将返回一个真值,这使得 while 循环条件为假(因为我们做了一个 !hasNextInt() )其中!给出另一个布尔值,分配的x 将始终是int因此避免了异常处理

这很好,因为您不必处理大量异常和try-catch 块,并且避免不得不执行其他人提到的不鼓励的方法,我假设这是一个简单的程序或一些任务,避免额外的复杂性。

但是,如果您需要更高级的错误处理异常,则绝对应该研究一下,因此您的思路是正确的。

【讨论】:

  • 非常感谢您抽出宝贵的时间@matrixanomaly,我一定会试试这个,因为它更简单。
  • @Laurenzanoster 别担心,我们随时为您提供帮助!我是数据结构 Java 课程的 TA,所以这是我必须教给学生的东西!祝 Java 好运,欢迎来到 SO!
【解决方案4】:

拥有一个处理所有异常的上帝类并不是一个好主意。通常每个异常都是一个独特的情况,应该单独处理。

但如果您仍想这样做,您可以在每个方法中添加 throws 声明,然后在一个起点将它们全部捕获。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多