이 메서드에 문자열을 전달 중입니다. 문자열은 "44"입니다. 그런 다음 그것을 int로 구문 분석하고 1과 12 사이에 있는지 확인하기 위해 if 문을 수행합니다. 그런 다음 여기에있는 else 문으로 이동합니다. - 새 IllegalArgumentException을 던집니다 ("Illegal month number here :"+ inSetString);잘못된 예외가 throw되었습니다.
어떤 이유에서든 예외가 발생하지 않고 다음 예외로 넘어 가서 throw됩니다. 새 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
@KebinKeeler 이미 던졌습니다! 그러나 당신은 그것을 붙잡고 그것에 대해 아무것도하지 않습니다. 따라서'try-catch'를 제거하고 다른 곳 (메소드가 호출 된 곳)에서 오류를 처리하거나'catch '블록 (예 : 로그 및 다시 throw)에서 실제로 작업을 수행하십시오. 그것은 당신이 성취하고자하는 것에 달려 있습니다. – Vache
내가 알아낼 수없는 문제는 catch 블록에 새로운 IllegalArgumentException을 추가하고 "토요일"에 전달하면 유효하지 않은 월 이름 문자열 대신 잘못된 월 번호를 여기에 표시한다는 것입니다. 이것은 "Saturday"가 Integer.parseInt()를 사용할 때 예외가 발생하기 때문입니다. "Saturday"는 IllegalArgumentException으로 나아 가지 않습니다. 1에서 12 사이 또는 1 일에 해당하지 않는 입력을 처리하려고합니다. – Jerinos