我试图在不重复代码的同时处理我的代码上的异常。我在"System"类上有很多方法,我不希望在所有方法中都写"Try Catch",因为我相信还有其他方法不能重复。
有什么想法吗?我要处理的异常是(inputMismatchException)。
编辑:更多信息,以防万一。我有几个方法,用户需要输入"int"(使用扫描仪),这是我需要处理的。
- 不知道如何用一般的方式回答这个问题。
- 你能展示一些代码片段吗?
- 我不鼓励您尝试什么,但是如果您真的想要这样做,有一种方法:总是在每个方法签名后放置throws Exception。(如public void myMethod(String param) throws Exception { ... })。但这基本上意味着只要程序出现异常,整个应用程序就会关闭。
- 我强烈反对throws Exception。它将隐藏这样一个事实:您实际上需要以特定的方式(例如,InterruptedException)处理特定的异常,您的方法现在可能不会抛出这些异常,但可能会随着代码的发展而改变。
- 您提到用户需要输入一个int,这是使用Scanner得到的吗?
- @正是矩阵分析!
- @劳伦萨诺,那就看看我对这个案子的回答吧!你走上了正确的道路,但你可以毫无例外地处理这个问题。
使用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块,并且避免像其他人提到的那样不得不执行不鼓励的方法,而且我假定这是为了一个简单的程序或一些分配,避免了额外的复杂性。
但是,如果您需要更高级的错误处理异常,那么您肯定应该研究一下,因此您的思路是正确的。
- 非常感谢您在Matrixanomaly的时间,我一定会尽量简单一些。
- @劳伦萨诺,别担心,我们都是来帮忙的!我是一个数据结构的Java课程的TA,所以这是我必须教给学生的东西!祝你好运的Java,欢迎来到!
让一个上帝类处理所有异常不是一个好主意。通常每个异常都是一个单独的情况,应该单独处理。
但是,如果您仍然想这样做,您可以向每个方法添加throws声明,然后在一个起点捕获所有方法。