抛出错误的异常

时间:2012-02-20 02:27:24

标签: java exception

我将字符串传递给此方法。字符串是“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);
         }
      }

1 个答案:

答案 0 :(得分:8)

抛出异常,但是你有一个不执行任何操作的catch块并允许执行继续。然后,您到达另一个异常,并且该程序崩溃了。

尝试在catch块中添加一些日志记录(或e.printStackTrace()),您将看到会发生什么。

另外,尝试使用IDE的调试器而不是添加print语句。您将更好地了解程序的执行情况。