Java 抛出了错误的异常

Java 抛出了错误的异常,java,exception,Java,Exception,我正在向这个方法传递一个字符串。字符串是“44”。然后我将其解析为一个int,并执行一个if语句以查看它是否在1和12之间。然后转到else语句,在那里我抛出了新的IllegalArgumentException(“这里的非法月号:”+inSetString) 出于某种原因,不会抛出该异常,它会转到下一个异常,然后抛出一个异常-抛出新的IllegalArgumentException(“无效的月份名称字符串:”+inSetString) 为什么它抛出第二个异常语句而不是第一个?它确实转到else

我正在向这个方法传递一个字符串。字符串是“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);
         }
      }
public void setMonthName(字符串插入字符串)
{
int i=0;
月数=-1;
尝试
{
System.out.println(“第一个”+插入字符串);
i=整数.parseInt(inSetString);
System.out.println(“下一个”+插入字符串);

如果(i>=1&&i抛出异常,但是您有一个catch块,它不做任何事情,并且允许继续执行。然后您到达另一个异常,该异常导致程序崩溃

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


另外,请尝试使用IDE的调试器,而不是添加打印语句。这样可以更好地了解程序的执行情况。

好的。谢谢您的回复。如何让它抛出else语句中的第一个IllegalArgumentException?@KebinKeeler您已经抛出了它!但是您捕获了它,并且对此不做任何处理。因此删除
try catch
并在其他地方(调用该方法的地方)处理错误,或者在
catch
块中实际执行某些操作(例如,再次记录并抛出)。这取决于您试图实现的目标。我不知道的问题是,如果我向catch块添加一个抛出新的IllegalArgumentException并传入“Saturday”会在此处抛出非法的月号消息,而不是无效的月名字符串。这是因为当我尝试使用Integer.parseInt()时,“Saturday”会出现异常。“Saturday”不会导致IllegalArgumentException。我正在尝试解释任何不在1到12之间或每月某一天之间的输入。”或者一个月的某一天”-我指的是一个月的名称。monthNames[]是一个数组,它保存所有月的名称。如果我将IllegalArgumentException添加到catch中,它不允许合法输入,例如“一月”,为什么不简单地使用重载?
setMonthName(int-monthNumber)
setMonthName(string-monthName)
并分别处理这两种情况?这将是一种更好的设计,它将使您的生活更容易处理您的问题。