我對標題有些困難,不確定如何更準確地說出它。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