2012-02-20 3 views
0

이 메서드에 문자열을 전달 중입니다. 문자열은 "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); 
     } 
     } 

답변

8

예외가 발생하지만, 당신은 무엇을하고 실행을 계속할 수없는 catch 블록을 가지고있다. 그런 다음 다른 예외가 발생하여 프로그램이 중단됩니다.

catch 블록에 일부 로깅 (또는 e.printStackTrace())을 추가해 보면 어떻게되는지 알 수 있습니다.

또한 인쇄 명령문을 추가하는 대신 IDE의 디버거를 사용해보십시오. 프로그램 실행에 대해 더 잘 이해하게 될 것입니다.

+0

확인. 답장을 보내 주셔서 감사합니다. else 문 안에있는 첫 번째 IllegalArgumentException을 던지려면 어떻게해야합니까? – Jerinos

+0

@KebinKeeler 이미 던졌습니다! 그러나 당신은 그것을 붙잡고 그것에 대해 아무것도하지 않습니다. 따라서'try-catch'를 제거하고 다른 곳 (메소드가 호출 된 곳)에서 오류를 처리하거나'catch '블록 (예 : 로그 및 다시 throw)에서 실제로 작업을 수행하십시오. 그것은 당신이 성취하고자하는 것에 달려 있습니다. – Vache

+0

내가 알아낼 수없는 문제는 catch 블록에 새로운 IllegalArgumentException을 추가하고 "토요일"에 전달하면 유효하지 않은 월 이름 문자열 대신 잘못된 월 번호를 여기에 표시한다는 것입니다. 이것은 "Saturday"가 Integer.parseInt()를 사용할 때 예외가 발생하기 때문입니다. "Saturday"는 IllegalArgumentException으로 나아 가지 않습니다. 1에서 12 사이 또는 1 일에 해당하지 않는 입력을 처리하려고합니다. – Jerinos

관련 문제