2013-05-15 4 views
-1

여기 내 코드의 일부입니다 ... 항상 컴파일 할 때 SelfDefineException에 대한 도달 할 수없는 catch 블록이 표시됩니다. 내가 SelfDefineException는 체크 예외가 (경우 그것을Java 중첩 된 try catch 블록 도달 할 수없는 문제

try 
    { 
     Statement 1; 
     Statement 1; 
     Statement 1; 
     Statement 1; 

     try 
     { 
      Statement 3; 
     } 
     catch (SelfDefineException er) 
     { 
      String error = er.getMessage(); 

      System.out.print("issue: \n\t(" +er.getMessage() + ")"); 
       result = false; 
      } 
     } 
    } 
    catch (SelfDefineException er) 
    { 
     System.out.print("failed: " + er.getMessage()); 
    } 
+0

어떤 catch 블록입니까? 당신은 2를 가지고 있습니다. – Bill

+6

중괄호를보세요. 나는 그들이 적절하게 일치하지 않는다고 생각한다. –

+0

첫 번째 캐치 이후에 두 개의 중괄호가 있습니다. – Bill

답변

1

를 해결하기 위해 만 번을 시도 사촌 이 예외는,

내가 고칠 수있는 방법, 누군가가 나를 도울 수 수있는 try 문 본체에서 발생하지 않습니다 RuntimeException을 확장하지 않는 한 아마 그럴 것입니다.) catch하거나 선언해야합니다 (http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html). 여기에 '도달 할 수없는 코드 "를 제공 할 수 있습니다 세 가지 시나리오가 있습니다 : 위 조건에 던질 수

  1. 문 3 SelfDefineException를 throw하는 방법을 호출하는 하나의 경우, 두 번째 캐치는 도달 할 수없는 그.
  2. 문 3에 SelfDefineException을 throw하는 메서드 호출이 없으면 첫 번째 catch에 연결할 수 없습니다.
  3. 메소드 정의에 "throw SelfDefineException"을 선언하는 메소드에 대한 호출이 없으면 두 catch 블록 모두 도달 할 수 없습니다.
+0

중괄호를 수정 한 후입니다. 일명 절대로. – Shrein

0

중괄호는 구문 오류가 아니며 연결할 수없는 문 오류가 발생해야합니다.

아마도 try 블록 중 하나에서 예외가 발생하지 않습니다. 이미 변수가 전에 라인에 er.getMessage()을 포함하는 선언이있을 때

또한, 왜

System.out.print("issue: \n\t(" +er.getMessage() + ")"); 

를 사용할 수 있습니까?

변수 만 사용하면 최소한 코드를 좀 더 읽기 쉽게 만들 수 있습니다.

System.out.print("issue: \n\t(" + error + ")");