[JAVA] 예외처리

haram·2023년 6월 15일
0

예외를 처리하는 두가지 추상 클래스

  • Exception : 컴파일시에 발생하는 에러를 처리할 때 사용
  • RuntimeException : 런타임시에 발생하는 에러를 처리할 때 사용

    Exception을 구현한 경우에는 예외 처리를 try catch 또는 throws를 통해 필수적으로 해야 하고,
    RuntimeException을 구현한 경우에는 예외 처리코드를 작성하지 않아도 되지만 이러한 경우 "예외 발생 함수를 호출한 최상위 함수(main함수)"까지 바로 종료되고 예외처리가 진행된다

예외처리 구현방법

try catch구문을 이용한 예외 처리와 함수 옆 throws키워드를 사용한 예외처리

차이점 : 예외 처리를 실행 하는 함수가 달라진다.

try catch : 예외가 발생한 함수에서 예외처리

  • 예외 발생시 cahch문으로 흐름이 넘어가고 해당 함수의 나머지 코드도 모두 실행된다. 따라서 아래 코드에서 divde함수는 int형을 return해야 하기 때문에 int형을 return하지 않으면 에러가 발생한다.

함수옆 throws : 예외가 발생한 함수를 호출한 함수에서 예외 처리

  • 예외가 발생한 함수를 바로 종료시키고 해당 함수를 호출한 대상에게 예외 처리를 넘긴다.

예제 코드

0으로 나누면 DivideException예외처리를 하는 코드

  • Exception을 구현한 클래스(기본형)
public class DivideException extends Exception{
}
  • try catch로 예외처리를 하는 코드
public class Main {

	public static void main(String[] args) {
		divide(5,0);
	}

	public static int divide(int a, int b){
		try {
			if(b == 0) {
				throw new DivideException();
			}
		}catch(DivideException e) {
			e.printStackTrace();
			return -1;
		}
		return a/b;
	}
}
  • throws로 예외처리를 하는 코드
public class Main {

	public static void main(String[] args) {
		try {
			divide(5,0);
		} catch (DivideException e) {
			e.printStackTrace();
		}
	}

	public static int divide(int a, int b) throws DivideException{
		if(b == 0) {
			throw new DivideException();
		}

		return a/b;
	}
}

0개의 댓글