Java-捕获多个异常并识别发生的异常
我对这个标题有点困难,不知道如何更准确地表达它 我遇到了这个问题,我有几种方法要求用户输入3Java-捕获多个异常并识别发生的异常,java,exception,try-catch,illegalargumentexception,Java,Exception,Try Catch,Illegalargumentexception,我对这个标题有点困难,不知道如何更准确地表达它 我遇到了这个问题,我有几种方法要求用户输入3Doubleinput。 对于每个输入,它都会检查它是否有效(例如,如果是正值),如果不是,则抛出一个IllegalArgumentException。现在我创建了一个Tester类来检查这些方法是否正常工作。它应该捕获方法引发的异常,并重新询问用户导致该特定异常的输入 所有3个方法都会抛出和IllegalArgumentException,但每个方法的错误消息都不同。(捕获异常时)是否可以查看导致错误的
Double
input。
对于每个输入,它都会检查它是否有效(例如,如果是正值),如果不是,则抛出一个IllegalArgumentException
。现在我创建了一个Tester类来检查这些方法是否正常工作。它应该捕获方法引发的异常,并重新询问用户导致该特定异常的输入
所有3个方法都会抛出和IllegalArgumentException
,但每个方法的错误消息都不同。(捕获异常时)是否可以查看导致错误的输入?以下是我的代码示例:
public class account
{
double value;
public account(double initialValue)
{
if (initialValue < 0)
{
throw new IllegalArgumentException("Initial value cannot be negative.");
}
value = initialValue;
}
public add(double addValue)
{
if (addValue < 0)
{
throw new IllegalArgumentException("Added value cannot be negative.");
}
value = value + addValue;
}
}
因此,只有当IllegalArgumentException
为“初始值不能为负”时,我必须在tester类中更改什么才能抛出该代码
对不起,我让你很难理解
编辑:根据我的教授,我们应该使用do
String error = e.toString;
if (error.contains("Added value cannot be negative.")
{
//DO CODE FOR FIRST ERROR
}
但是我知道这不是最合适的方法。用自己的try/catch块围绕每个方法调用?因为你不能像在函数式语言中那样匹配字符串,如果你想使用try-catch机制来区分它们,你必须提供三种不同类型的对象 或者使用一种简化的方法将一个参数附加到异常,这样您就可以只使用
catch
子句,但您的行为可能会有所不同。差不多
class MyIllegalArgumentException extends IllegalArgumentException {
public int whichParameter;
public MyIllegalArgumentException(String string, int which) {
super(string);
whichParameter = which;
}
}
现在您可以:
catch (MyIllegalArgumentException e) {
if (e.whichParameter == 0)
..
else if (e.whichParameter == 1)
..
}
您也可以检查字符串是否相等,但这确实不是一个好的设计选择,您也可以有许多try-catch块,但这并不总是可能的
扩展代码后,解决方案很简单:
public static void main(String[] args) {
try {
double initialValue = ...
account acc = new account(initialValue);
} catch (IllegalArgumentException e) {
...
}
try {
double addValue = ...
acc.add(addValue);
} catch (Exception e) {
System.out.println("Wrong ammount");
initialValue = Double.parseDouble(JOptionPane.showInputDialog("Re-enter ammount"));
}
}
在catch块中,您应该只捕获IllegalArgumentException。然后,您可以调用
getMessage()
函数,这将使您能够执行一个非常简单的String.equals调用。因此,要澄清的是,代码中可能会抛出illegargumentexception
还有其他原因吗?除了“初始值不能为负”之外?我相信有一种更简单的方法,但您可以创建自己的异常类,该类继承自IllegalArgumentExceptiongetMessage()
Ew。试图解析异常消息以识别它有异味。您可以控制引发异常的代码吗?您可以让它引发子异常类型吗?@prelic是的,只是稍微扩展了代码以使其更清晰。@LouisWasserman遗憾的是没有:(,此时我只能编辑tester类。@Chris完全正确。在tester类中执行此操作。
public static void main(String[] args) {
try {
double initialValue = ...
account acc = new account(initialValue);
} catch (IllegalArgumentException e) {
...
}
try {
double addValue = ...
acc.add(addValue);
} catch (Exception e) {
System.out.println("Wrong ammount");
initialValue = Double.parseDouble(JOptionPane.showInputDialog("Re-enter ammount"));
}
}