본문 바로가기

Java

예외 처리(Exception handling)(2) - 예외 처리하기, try~catch문 흐름

- 예외 처리란 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것을 의미합니다. 

  예외 처리의 목적은 프로그램의 비정상 종료를 막고, 정상적인 실행 상태를 유지하는 것입니다. 

 

1) try~catch문

- 예외를 처리할 때 사용하는 구문 중 하나가 try~catch문 입니다. 

   try~catch문의 예시를 코드로 나타내면 다음과 같습니다. 

   if문과는 달리, try 블럭이나 catch 블럭은 블럭 내에 포함된 문장이 한 줄이라도 괄호를 생략할 수 없습니다. 

try{
  // 예외가 발생할 가능성이 있는 문장을 넣는다.
}catch(Exception e1){
  // Exception1이 발생했을 경우, 처리할 문장을 넣는다.
}catch(Exception e2){
  // Exception2가 발생했을 경우, 처리할 문장을 넣는다.
}catch(Exception e3){
  // Exception3가 발생했을 경우, 처리할 문장을 넣는다.
}catch(Exception e4){
  // Exception4가 발생했을 경우, 처리할 문장을 넣는다.
}

 

2) try~catch문에서의 흐름

(1) try블럭 내에서 예외가 발생한 경우

(1-1) 발생한 예외와 일치하는 catch 블록이 있는지 확인한다

(1-2) 일치하는 catch 블럭을 찾게 되면, 해당 catch 블럭 내의 문장을 수행하고,

         전체 try~catch문을 빠져 나가서 그 다음 문장을 계속해서 수행한다. 

         만일 일치하는 catch 블럭을 찾지 못하면 예외는 처리되지 못한다

class Ex8_2{

	public static void main(String[] args){
    	System.out.println(1);
        try{
        	System.out.println(0/0); // 예외 발생
        	System.out.println(2);
        }catch(ArithmeticException ae){
        	System.out.println(3);
        }
        System.out.println(4);
    }
}

// 실행 결과
1 3 4

 

(2) try블럭 내에서 예외가 발생하지 않는 경우

(2-1) catch 블럭을 거치지 않고 전체 try~catch문을 빠져나가서 수행을 계속한다. 

class Ex8_1{

	public static void main(String[] args){
    	System.out.println(1);
        try{
        	System.out.println(2);
        	System.out.println(3);
        }catch(Exception e){
        	System.out.println(4);
        }
    	System.out.println(5);
    }	
}

// 실행 결과
1 2 3 5

 

3) 예외의 발생과 catch 블럭

- 예외가 발생하면, 이를 처리할 catch 블럭을 찾아 내려갑니다. 

  일치하는 catch 블럭이 없으면, 예외 처리는 되지 않으며,

  Exception이 선언된 catch 블럭은 모든 예외를 처리하므로, 마지막 catch 블럭이 되어야 합니다. 

class Ex8_4{
	public static void main(String[] args){
    	System.out.println(1);
        System.out.println(2);
        
        try{
            System.out.println(3);
            System.out.println(0/0);
            System.out.println(4);
        }catch(ArithmeticException ae){
        	if(ae instanceof ArithmeticException){
            	System.out.println("true");
            }
        	System.out.println("ArithmeticException");
        }catch(Exception e){
        	System.out.println("Exception");
        }
    	System.out.println(6);
    }
}

// 실행 결과
1 2 3 true ArithmeticException 6

 

참고

남궁성 자바의 정석