컴퓨터 & 코딩/Java

[혼공학습단 10기][혼공자] 예외 처리

구로그 2023. 7. 12. 15:02
728x90

✓ 예외 클래스

 

💡 자바는 예외를 클래스로 관리한다. 예외가 발생하면 해당 예외 클래스로 객체를 생성한다. 

 

예외의 두 종류 

- 일반 예외: 컴파일러 체크 예외. 컴파일하는 과정에서 예외 처리 코드가 있는지 검사. (RuntimeException의 하위 클래스가 아님)

 

- 실행 예외: 컴파일러 넌 체크 예외. 실행 시 예측할 수 없이 갑자기 발생. 컴파일 과정에서 예외 처리 코드가 있는지 검사하지 않는다.(RuntimeException 의 하위 클래스)

 

1) NullPointerException: 객체 참조가 없는 상태. null값을 갖는 참조 변수로 객체 접근 연산자(도트.) 를 사용했을 때 발생 

2) ArrayIndexOutOfBoundsException: 배열에서 인덱스 범위를 초과했을 경우. 

3) NumberFormatException: 문자열을 숫자로 변환할 때 숫자로 변환될 수 없는 문자가 포함된 경우.

4) ClassCastException: 상속/구현관계 사이 잘못된 타입 변환

❗️ 실행 예외는 꼭 예외 처리 코드를 작성해 줘야 프로그램이 예외를 만났을 때 곧바로 종료되는 걸 막을 수 있다. 

 

 

 

 

✓ 예외 처리 

try-catch-finally 블록 

try {

    // 예외 발생 가능 코드

} catch(예외클래스 e) {

    // 예외 처리
    // 예외가 발생했을 때만 실행되는 코드

} finally { 

    // 항상 실행
    // 생략 가능

}

 - finally는 try, catch 블록 사이에 return문이 있더라도 항상 실행된다. 

- 다중 catch: 발생할 수 있는 다양한 예외들의 처리코드를 각각 작성. 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다. 

 

 

 

예외 떠넘기기 throws 

- throws 키워드를 메소드 선언부 끝에 작성

- 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할. 

리턴타입 메소드이름(매개변수, ...) throws 예외클래스1, 예외클래스2, ... { }
리턴타입 메소디이름(매개변수, ...) throws Exception { }

throws가 붙어있는 메소드는 반드시 try 블록 내에서 호출되고 catch 블록에서 떠넘겨 받은 예외를 처리해야 한다

 

public static void main(String[] args) {
    try { 
        findClass();
    } catch(ClassNotFoundException e) {
        System.out.println("클래스가 존재하지 않습니다.");
    }
}

public static void findClass() throws ClassNotFoundException {
    Class clazz = Class.forName("java.lang.String2");
}
반응형