我傳入一個字符串到這個方法。字符串是「44」。然後,我將它解析爲一個int,並執行一條if語句來查看它是否在1和12之間。然後它轉到else語句所在的位置 - 拋出新的IllegalArgumentException(「非法的月份數字在這裏:」+ inSetString);錯誤的異常被拋出
出於某種原因,這不會被拋出,它會下降到下一個異常,並拋出一個 - 拋出新的IllegalArgumentException(「Invalid month name string:」+ inSetString);
爲什麼拋出第二個異常聲明但不是第一個?它會轉到else語句。我已經通過使用 - System.out.println(「except」+ inSetString)來測試它;
這裏是我的代碼:
public void setMonthName(String inSetString)
{
int i = 0;
monthNumber = -1;
try
{
System.out.println("first" + inSetString);
i = Integer.parseInt(inSetString);
System.out.println("next" + inSetString);
if (i >= 1 && i <= 12)
{
monthNumber = i;
}
else
{
System.out.println("except" + inSetString);
throw new IllegalArgumentException("Illegal month number here: " + inSetString);
}
}
catch (IllegalArgumentException e)
{
}
// if it gets to here we know it's a string
for (int index = 0; index < monthNames.length; index++)
{
if (monthNames[index].equalsIgnoreCase(inSetString))
{
monthNumber = index;
}
}
if (monthNumber == -1)
{
throw new IllegalArgumentException("Invalid month name string: " + inSetString);
}
}
好的。謝謝回覆。如何讓它拋出else語句中的第一個IllegalArgumentException? – Jerinos 2012-02-21 03:32:04
@KebinKeeler你已經扔掉了!但是你抓住它並且什麼都不做。所以要麼刪除'try-catch'並在其他地方(在調用方法的地方)處理錯誤,要麼在你的catch塊中做某些事情(例如記錄並再次拋出)。這取決於你想要達到的目標。 – Vache 2012-02-21 03:47:23
我無法弄清楚的問題是,如果我添加一個拋出新的IllegalArgumentException異常的catch塊並通過「星期六」它會拋出非法的月份號碼在這裏消息,而不是無效的月份名稱字符串。這是因爲當我嘗試使用Integer.parseInt()時,「星期六」出現異常。 「星期六」不會讓它進入IllegalArgumentException。我試圖說明任何不在1到12或一個月中的某一天的輸入。 – Jerinos 2012-02-21 04:15:47