JAVA/포스팅

자바 예외의 발생과 catch블럭

짜집퍼박사(짜박) 2023. 11. 14. 01:35

자바에서 예외가 발생하면 프로그램의 실행 흐름이 중단되고, 해당 예외를 처리할 수 있는 catch 블록이 찾아지기까지 메서드 호출 스택을 따라 올라갑니다. 여기에서는 예외의 발생과 catch 블록의 동작에 대해 자세히 설명합니다.

 

예외의 발생

 

1. 예외 발생 시점

- 예외는 프로그램 실행 중에 오류 상황이 발생할 때, 예를 들어 잘못된 연산, 배열 범위 초과, 파일이 없는 등의 상황에서 발생합니다.
- 예외는 실행 시(runtime)에 발생하며, 컴파일 시에 예측할 수 없는 상황에서 발생하는 런타임 예외(Runtime Exception)과 컴파일 시에 예측 가능한 예외를 나타내는 체크된 예외(Checked Exception)로 나뉩니다

 

2. 예외 객체 생성

예외가 발생하면 해당 예외를 나타내는 객체가 생성됩니다. 이 객체는 예외에 관한 정보를 포함하고 있습니다. 이 정보에는 예외의 타입, 메시지, 호출 스택의 상세 정보 등이 포함될 수 있습니다.

 

3. 예외 발생 지점에서의 실행 중단

예외가 발생한 지점에서 현재 실행 중인 메서드의 실행이 중단되고, 해당 메서드의 호출 스택이 역순으로 따라 올라가면서 예외를 처리할 수 있는 catch 블록을 찾습니다.

 

 

catch 블록

 

1. 예외를 처리할 catch 블록 탐색

호출 스택을 따라 올라가면서, 예외를 처리할 수 있는 catch 블록을 찾습니다. 찾을 때까지 메서드 호출 스택은 계속 상위로 올라갑니다.

 

2. 첫 번째 일치하는 catch 블록 실행

일치하는 catch 블록을 찾으면 해당 블록이 실행됩니다. Java는 호출 스택을 따라 올라가면서 첫 번째로 일치하는 catch 블록을 찾아 실행합니다.

 

3. catch 블록의 실행

catch 블록은 예외를 처리하는 코드를 포함하고 있습니다. 이 블록이 실행되면서 예외에 대한 처리, 로깅, 복구 등이 수행됩니다.

 

4. 예외 처리 후의 실행 흐름

예외가 처리되면 해당 catch 블록의 실행이 끝나고, 프로그램은 예외가 발생한 지점 이후로 정상적으로 계속 진행됩니다.

 

5. catch 블록이 없을 경우

호출 스택의 가장 상위에 도달하더라도 일치하는 catch 블록을 찾지 못하면, 예외는 프로그램을 종료시키거나 기본 예외 처리기에 의해 처리됩니다.

 

다음은 간단한 예제를 통해 try-catch의 동작을 보여줍니다.

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("나누기 결과: " + result);
        } catch (ArithmeticException e) {
            System.err.println("0으로 나눌 수 없습니다. 다시 시도하세요.");
        } catch (Exception e) {
            System.err.println("예외가 발생했습니다: " + e.getMessage());
        }
        System.out.println("프로그램 종료");
    }

    private static int divide(int numerator, int denominator) {
        return numerator / denominator;
    }
}

이 예제에서는 10을 0으로 나누는 상황을 가정하고, try-catch 블록을 통해 예외를 처리하고 있습니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 메서드에 예외 선언하기  (0) 2023.11.14
자바 예외 발생시키기  (0) 2023.11.14
자바 try-catch문에서의 흐름  (0) 2023.11.14
자바 try-catch문  (0) 2023.11.14
자바 예외 클래스의 계층구조  (0) 2023.11.14