我将字符串传递给此方法。字符串是“44”。然后我将它解析为一个int并执行if语句以查看它是否在1到12之间。然后转到我所拥有的else语句 - 抛出新的IllegalArgumentException(“非法月份数字:”+ inSetString);
出于某种原因,这不会被抛出,它会下降到下一个异常并抛出一个 - 抛出新的IllegalArgumentException(“无效的月份名称字符串:”+ inSetString);
为什么它会抛出第二个异常语句而不是第一个异常语句?它会转到else语句。我已经通过使用--System.out.println(“除了”+ 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);
}
}
答案 0 :(得分:8)
抛出异常,但是你有一个不执行任何操作的catch块并允许执行继续。然后,您到达另一个异常,并且该程序崩溃了。
尝试在catch块中添加一些日志记录(或e.printStackTrace()
),您将看到会发生什么。
另外,尝试使用IDE的调试器而不是添加print语句。您将更好地了解程序的执行情况。