关于Java:Java – 编写一种方法来处理所有异常

Java - Write one method to handle all exceptions

我试图在不重复代码的同时处理我的代码上的异常。我在"System"类上有很多方法,我不希望在所有方法中都写"Try Catch",因为我相信还有其他方法不能重复。

有什么想法吗?

我要处理的异常是(inputMismatchException)。

编辑:更多信息,以防万一。我有几个方法,用户需要输入"int"(使用扫描仪),这是我需要处理的。


使用Java 7,你可以做到这一点。

参考在同一catch子句中,我能捕获多个Java异常吗?

使用Java SE 7异常更改


我一般不建议这样做:只需让您的所有方法抛出异常,并在一个地方在较高的级别处理所有异常。这很好,只适用于某些测试,或者当您想要快速开发某些东西,而不应该是正常的方法时。

您可以在这里找到更多:https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html

还有一些关于应该如何做的规则:投掷或尝试+接球


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

正如您在评论中提到的,您通过Scanner类从用户那里获取输入。由于Scanner允许用户键入他们想要的任何值,而您只想处理整数,因此您可能希望(或已经使用)Scanner.nextInt()方法。教程在这里。

如果您只需要处理InputMismatchException,这个问题的答案将在一个地方处理所有的异常。

或者,正如这个问题所探讨的,您可以不必处理异常,只需始终向用户请求一个int,直到用户正确地输入一个整数,修改如下:

1
2
3
4
5
6
7
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()方法将返回一个true,这使得while循环条件为false(因为我们做了一个!hasnextint())在哪里!给出另一个布尔值,指定的x始终是int,因此避免了异常处理。

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

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


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

但是,如果您仍然想这样做,您可以向每个方法添加throws声明,然后在一个起点捕获所有方法。