관리 메뉴

오버플로

[Java] Exception Handling - Try~catch / Finally 본문

Java

[Java] Exception Handling - Try~catch / Finally

NACO 2021. 8. 25. 21:01

~예외처리 이어서~

 

 try ~ catch (+finally) 

- 던져진(throws) 예외를 잡거나, 발생된(throw) 예외를 잡아서 처리하는 문법

- try ~ catch 블록 안에서 발생한 예외는 해당 catch로 가서 처리된 후 finally 수행 후 나옴
   (*finally는 반드시 실행되어야 할 코드가 있을 때 사용함)

 

- 문법) try { *예외 발생 예상 코드 // 실행할 코드

           } catch ( 예외처리클래스명 객체명 ) {

             예외가 발생했을 때 처리할 코드  // 예외가 발생해야 수행됨

           } catch (Exception e) { // 예외처리 최상위 부모 클래스로, 놓친 예외를 잡을 수 있음.

             예외가 발생했을 때 처리할 코드 }

           } finally { // 선택적

             반드시 실행되어야 할 코드}

 

* catch는 예외처리클래스의 상속관계에 따라 자식클래스를 먼저 작성하고 부모클래스를 나중에 작성하자

 

* 예외 발생 예상 코드 : method를 보면 method가 날리는 예외 정보를 확인할 수 있음

  Ex) Integer Class의 parseInt method는 NumberFormatException을 throws하고 있음

       (=이 예외가 발생할 수 있다)

       > NumberFormatException은 RuntimeException이었기 때문에 try~catch를 하지 않더라도 쓸 수 있음

          CompileException이었으면 반드시 예외처리를 해주었어야 한다!!

 

Java API의 Integer Class의 parseInt method


# 오늘의 코딩 #

- RuntimeException을 확인해보자

/**
 * RuntimeException에 대해 처리
 * @author user
 */
public class UseRuntimeException {

	public static void main(String[] args) {
		// main method arguments 두개를 입력 받아 나눈 결과를 출력하는 일
		try {
		int num = Integer.parseInt(args[0]); //ArrayIndexOutOfBoundsException, NumberFormatException
		int num2 = Integer.parseInt(args[1]); //ArrayIndexOutOfBoundsException
		int result = 0;

		result = num / num2; // ArithmeticException
		System.out.println(num + "/" + num2 + "=" + result);
		} catch (ArrayIndexOutOfBoundsException aioobe) { // 입력값 안 넣으면 발생
			System.err.println("입력값은 2개 이어야 합니다.");
			System.err.println("사용 예) java UseRunTimeException 값1 값2");
		} catch (NumberFormatException nfe) {
			System.err.println("입력값은 숫자 형태이어야 합니다.");
			System.err.println("사용 예) java UseRunTimeException 숫자 숫자");
		} catch (ArithmeticException ae) {
			System.err.println("0으로 나눌 수 없습니다.");
		} catch (Exception e) { // 예외처리 객체의 최상위 부모. 모든 예외를 다 잡을 수 있음
			System.err.println("개발자가 인지하지 못 한 예외");
		} finally {
			System.out.println("무조건 실행되어야 하는 코드");
		}
	}// main

}// class

 

# 출력 결과 #

args 기입 종류에 따라서 catch문이 잘 실행되는 것을 확인!

finally에 있는 "무조건 실행되어야 하는 코드" 도 확인 ㅎㅎㅎ 

Comments