Java 抛出了错误的异常
我正在向这个方法传递一个字符串。字符串是“44”。然后我将其解析为一个int,并执行一个if语句以查看它是否在1和12之间。然后转到else语句,在那里我抛出了新的IllegalArgumentException(“这里的非法月号:”+inSetString) 出于某种原因,不会抛出该异常,它会转到下一个异常,然后抛出一个异常-抛出新的IllegalArgumentException(“无效的月份名称字符串:”+inSetString) 为什么它抛出第二个异常语句而不是第一个?它确实转到else语句。我已经使用-System.out.println(“除了”+inSetString)对其进行了测试 这是我的密码:Java 抛出了错误的异常,java,exception,Java,Exception,我正在向这个方法传递一个字符串。字符串是“44”。然后我将其解析为一个int,并执行一个if语句以查看它是否在1和12之间。然后转到else语句,在那里我抛出了新的IllegalArgumentException(“这里的非法月号:”+inSetString) 出于某种原因,不会抛出该异常,它会转到下一个异常,然后抛出一个异常-抛出新的IllegalArgumentException(“无效的月份名称字符串:”+inSetString) 为什么它抛出第二个异常语句而不是第一个?它确实转到else
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)
并分别处理这两种情况?这将是一种更好的设计,它将使您的生活更容易处理您的问题。