我试图处理我的代码上的异常,同时又不重复它。
我在" System"上有很多方法。上课和我宁愿不写'#34;试试Catch"在所有这些中我认为还有其他方法不重复它。有什么想法?
我想要处理的异常是(InputMismatchException)。
编辑:更多信息,以防万一你需要它。 我有几种方法,用户需要输入' Int'(使用扫描仪),这就是我需要处理的内容。
答案 0 :(得分:2)
我一般不推荐这样做:只需将所有方法抛出异常,并在一个地方处理上层的所有异常。这只适用于某些测试,或者当您想要快速开发某些东西而不应该是正常的方法时。
你可以在这里找到更多: https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html
还有一些关于你应该如何做的规则: Throws or try+catch
答案 1 :(得分:2)
使用Java 7,你可以做到。
参考 Can I catch multiple Java exceptions in the same catch clause?
答案 2 :(得分:1)
拥有一个处理所有异常的神类是不明智的。通常每个例外都是一个独特的情况,应该单独处理。
但如果您仍然想要,可以在每个方法中添加throws声明,然后在一个起始点捕获它们。
答案 3 :(得分:1)
这是您想要尝试的另一种方法,它不会隐式处理异常。
正如您的评论中所提到的您正在通过 Scanner
类从用户获取意见。由于Scanner
允许用户输入他们想要的任何值而你只想处理整数,你可能想要(或者你已经在使用){{1} } 方法。 Tutorial here.
如果您只需要在一个地方处理Scanner.nextInt()
,this question has an answer that handles所有异常。
或者,作为此question explores,,您可以不必处理异常,只需要用户输入一个int,直到用户正确输入一个整数,修改如下:
InputMismatchException
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()
方法将返回一个true,这使得while循环条件为false(因为我们做了!hasNextInt())其中!给出另一个布尔值,分配的hasNextInt()
将始终为x
,,从而避免异常处理。
这很好,因为你不需要处理大量的异常和int
块,并且避免像其他人提到的那样做了沮丧的方法,而且我认为这是一个简单的程序或一些任务,避免额外的复杂性。
但是,如果您需要更高级的错误处理异常肯定是您应该研究的内容,那么您就是正确的思路。