我对标题有些困难,不确定如何更准确地说出它。Java - 捕获多个异常并确定发生了哪个异常
我有这个问题,我有几种方法要求用户输入3 Double
。 对于每个输入它检查它是否有效(例如,如果它是一个正值),如果它不是它会引发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;
}
}
和测试类会是这样的:
public class accountTester
{
public static void main(String[] args)
{
try
{
double initialValue = Double.parseDouble(JOptionPane.showInputDialog("Enter initial value"));
account acc = new account(initialValue);
double addValue = Double.parseDouble(JOptionPane.showInputDialog("Enter value to add"));
acc.add(addValue);
} catch (Exception e) {
System.out.println("Wrong ammount");
initialValue = Double.parseDouble(JOptionPane.showInputDialog("Re-enter ammount"));
}
}
那么我会在测试类改为抛出代码只有在IllegalArgumentException
是“初始值不能是负值。”
对不起,如果我让这很难理解。
编辑:据我的教授,我们应该用做
String error = e.toString;
if (error.contains("Added value cannot be negative.")
{
//DO CODE FOR FIRST ERROR
}
我知道这是不是虽然这样做的最正确的方法。
因此,澄清,是否有其他原因'IllegalArgumentException'可能会在您的代码中抛出?除了“初值不能为负”?我确定有一个更简单的方法,但是你总是可以创建自己的异常类,它继承自IllegalArgumentException。 – prelic 2012-03-03 03:03:45
http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable。'getMessage()' – 2012-03-03 03:04:00
Ew。尝试解析异常消息以识别它是很臭的。你是否可以控制抛出异常的代码,并且可以让它抛出一个子异常类型? – 2012-03-03 03:05:29