Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 하나의 try 블록에 여러 개의 catch 블록 정의하기

네, 자바(Java)에서는 하나의 try 블록에 여러 개의 catch 블록을 정의할 수 있습니다.

  • 모든 try 블록은 반드시 최소 하나 이상의 catch 블록과 함께 사용되어야 합니다.
  • try 블록 안에서 예외 객체가 발생했을 때 여러 개의 catch 블록이 존재한다면, 각 catch 블록이 정의된 순서에 따라 우선순위가 부여됩니다.
  • 즉, 항상 첫 번째 catch 블록이 가장 높은 우선순위를 가지며, 해당 블록이 발생한 예외 객체를 처리할 수 없는 경우에만 바로 다음 catch 블록으로 검사가 넘어갑니다.

예제 코드

class TryWithMultipleCatch {
   public static void main(String args[]) {
      try{
         int a[]=new int[5];
         a[3]=10/0;
         System.out.println("try 블록의 첫 번째 출력문");
      } catch(ArithmeticException e) {
         System.out.println("경고: ArithmeticException");
      } catch(ArrayIndexOutOfBoundsException e) {
         System.out.println("경고: ArrayIndexOutOfBoundsException");
      } catch(Exception e) {
         System.out.println("경고: 기타 다른 예외");
      }
      System.out.println("try-catch 블록 종료");
   }
}

실행 결과

경고: ArithmeticException
try-catch 블록 종료

동작 원리

위 코드에서 a[3]=10/0; 문장이 실행되는 순간 0으로 나누기를 시도하므로 ArithmeticException이 발생합니다. JVM은 try 블록 내에서 예외를 감지하면 위에서부터 차례대로 catch 블록을 검사하고, 가장 먼저 일치하는 첫 번째 catch 블록(ArithmeticException 처리부)에서 예외를 처리한 뒤 try-catch 구문 이후의 문장으로 실행 흐름을 이어갑니다.

주의 사항

여러 catch 블록을 작성할 때는 반드시 하위 예외 클래스(예: ArithmeticException, ArrayIndexOutOfBoundsException)를 상위 예외 클래스(예: Exception)보다 먼저 배치해야 합니다. 상위 타입인 Exception이 앞쪽에 선언되면 그 뒤에 있는 catch 블록들은 도달할 수 없어(unreachable catch block) 컴파일 오류가 발생하기 때문입니다.