Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 도달할 수 없는 catch 블록은 무엇입니까?


통제할 수 없는 명령문 블록 어떤 경우에도 접근할 수 없는 블록이라고 부를 수 있습니다. . 도달할 수 없는 블록은 Java에서 지원되지 않습니다. 예외 클래스는 항상 마지막에 있어야 하며 참조로 언급된 catch 블록 예외 때문에 catch 블록 수퍼클래스입니다. 모든 예외의. 여러 catch 블록을 유지하는 경우 catch 블록의 순서는 가장 구체적인 것에서 가장 일반적인 것이어야 합니다. . 즉, Exception의 서브클래스가 먼저 와야 하고 슈퍼클래스가 나중에 와야 합니다. 상위 클래스를 먼저 유지하고 하위 클래스를 나중에 유지하면 컴파일러에서 연결할 수 없는 catch 블록 오류가 발생합니다. .

구문

try {
   // statements
} catch(Exception e) {
   System.out.println(e);
} catch(NumberFormatException nfe) { //unreachable block. Not supported by Java, leads to an error.
   System.out.println(nfe);
}

다음 조건이 모두 true인 경우 컴파일러에서 catch 절에 도달할 수 있는 것으로 간주됩니다.

  • try 블록에서 throw되는 확인된 예외는 C의 매개변수에 할당할 수 있습니다.
  • 매개변수 유형이 C의 매개변수 유형과 같거나 상위 유형인 이전 catch 절이 없습니다.

다음 두 조건이 모두 참인 경우 컴파일러에서 catch 절에 도달할 수 있는 것으로 간주합니다.

  • catch 절 매개변수 유형 E에는 확인되지 않은 예외가 포함되지 않습니다.
  • 유형이 E의 (엄격한) 하위 유형인 try 블록에서 throw되는 모든 예외는 이미 이전 catch 절에서 처리됩니다.

예시

public class UnreachableBlock{
   public static void main(String[] args) {
      try {
         int i = Integer.parseInt("abc"); //This statement throws NumberFormatException
      } catch(NumberFormatException nfe) {
         System.out.println("This block handles NumberFormatException");
      } catch(Exception e) {
         System.out.println("This block handles all exception types");
      } catch (Throwable t) {
         System.out.println("Throwable is super class of Exception");
      }
   }
}

출력

This block handles NumberFormatException