본문 바로가기

TIL

[TIL] 예외처리 [Java]

예외처리

예외

  • 예측 가능한 상황에서 오류를 제어할 수 있는 것
  • compile 시 발견할 수 있는 예외
    - IDE가 빨간줄로 표시해준다.
  • runtime 시 발견할 수 있는 예외
    - 프로그래머가 예외 처리를 해주어야 한다.

자바에서 모든 예외는 Exception 클래스를 상속 받는다.

출처: https://youn12.tistory.com/32

try ~ catch

try {

} catch (IOException e) {

} catch (Exception e) {

} finally {

}
  • try
    - 예외가 발생할 만한 코드 작성
  • catch
    - 예외가 발생했을 때 처리하는 동작
    - 여러개 작성 가능하다. 하지만 부모 클래스는 자식 클래스 catch보다 밑에 있어야 한다. 즉, Exception 클래스의 경우 모든 예외 클래스의 부모 클래스이므로 catch문에 사용하려면 가장 아래 catch문에 작성해야 한다.
  • finally
    - 예외가 발생하든 안하든 수행해야 하는 코드
    - 생략 가능하다.

trhows

  • 예외를 여기서 처리하지 않고 전가하겠다는 것이다.
  • try~catch 문 외에 예외를 호출한 곳으로 다시 예외를 떠넘기는 것이다.
  • 발생할 수 있는 예외를 쉼표로 구분하여 나열할 수 있다.
public class ThrowsException {
	public static void main(String[] args) {
    	try {
        	throwException();
        } cetch (ClassNotFoundException e) {
        	System.out.println(e.getMessage());
        }
    }
    
    static void throwsException() throws ClassNotFoundException, NullPointerException {
    	Class.forName("예외 발생");
    }
}

// 출력: 예외 발생
  • throws 키워드를 사용해 해당 예외를 발생한 메서드 안에서 처리하는 것이 아닌, 메서드를 호출한 곳으로 떠넘긴다.
  • 여기서는 예외 처리의 책임은 throwException 메서드가 아닌 main 메서드가 지게 된다.

throw

  • 의도적으로 예외를 발생시킨다.
  • 예기치 않게 발생할 수 있는 에러에 대응할 수 있도록 사전에 코드를 작성하여 예외 처리
public class ThrowException {
	public static void main(String[] args) {
    	try {
        	Exception intendedException = new Exception("의도적인 예외");
            throw intendedException;
        } catch (Exception e) {
        	System.out.println(e.getMessage());
        }
    }
}

// 출력: 의도적인 예외