Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

예외 처리하기, try-catch문 본문

Java/JAVA2

예외 처리하기, try-catch문

빌드이너프 2023. 6. 20. 11:43

예외 처리(exception handing)

정의 프로그램의 실행시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

 

try-catch 문

예외처리할 때 사용하는 문

if문과 달리, try 블럭이나 catch 블럭 내에 포함된 문장이 하나뿐이어도 괄호{}를 생략할 수 없다

try {
    // 예외가 발생할 가능성이 있는 문장들을 넣는다
} catch (Exception1 e1) {
    // Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 넣는다
} catch (Exception2 e2) {
    // Exception2이 발생했을 경우, 이를 처리하기 위한 문장을 넣는다
} catch (ExceptionN eN) {
    // ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 넣는다
}

 

try 블럭 내에서 예외가 발생한 경우

1. 발생한 예외와 일치하는 catch 블럭이 있는지 확인한다

2. 일치하는 catch 블럭을 찾게 되면 그 catch 블럭 내의 문장들을 수행하고, 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch 문장을 찾지 못하면, 예외는 처리되지 못한다

class Exception {
    public static void main(String args[]) {
        System.out.println(1);
        try {
            System.out.println(0/0); // 예외 발생
            System.out.println(2);
        } catch (ArithmeticException ae) {
            System.out.println(3);
        } // try-catch 끝
        System.out.println(4);
    }
}

1
3
4

 

 

try 블럭 내에서 예외가 발생하지 않은 경우

1. catch 블럭을 거치지 않고 전체 try-catch 문을 빠져나가서 수행을 계속한다

class Exception {
    public static void main(String args[]) {
        System.out.println(1);
        try {
            System.out.println(2);
            System.out.println(3);
        } catch (Exception e) {
            System.out.println(4); // 실행되지 않음
        } // try-catch 끝
        System.out.println(5);
    }
}

1
2
3
5

코드

두 번째 catch문에 Exception: 모든 예외의 최고조상으로 모든 예외처리가능하기 때문에 제일 마지막 catch 문에 와야한다

public class ExceptionTest {
    public static void main(String[] args) {
        System.out.println(1);
        System.out.println(2);
        try {
            System.out.println(3);
            System.out.println(0 / 0); // 0으로 나눠 고의로 ArithmeticException을 발생시킨다
            System.out.println(4); // 실행되지 않는다
        } catch (ArithmeticException ae) {
            if (ae instanceof  ArithmeticException)
                System.out.println("true");
            System.out.println("ArithmeticException");
        } catch (Exception e) { // ArithmeticException을 제외한 모든 예외가 처리된다
            System.out.println("Exception");
        }  // try-catch의 끝
        System.out.println(6);
    }
}


1
2
3
true
ArithmeticException
6

예외처리 되지않은 코드

public class ExceptionTest {
    public static void main(String[] args) {
        System.out.println(1);
        System.out.println(2);
        try {
            System.out.println(3);
            System.out.println(args[0]); // ArrayIndexOutOfBoundException
            System.out.println(4); // 실행되지 않는다
        } catch (ArithmeticException ae) {
            if (ae instanceof  ArithmeticException)
                System.out.println("true");
            System.out.println("ArithmeticException");
        }  // try-catch의 끝
        System.out.println(6);
    }
}

1
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
	at ExceptionTest.main(ExceptionTest.java:7)


예외처리된 코드

ArrayIndexOutOfBoundsException 대신 최고조상인 Exception으로 해도된다

public class ExceptionTest {
    public static void main(String[] args) {
        System.out.println(1);
        System.out.println(2);
        try {
            System.out.println(3);
            System.out.println(args[0]); // ArrayIndexOutOfBoundException
            System.out.println(4); // 실행되지 않는다
        } catch (ArithmeticException ae) {
            if (ae instanceof ArithmeticException)
                System.out.println("true");
            System.out.println("ArithmeticException");
        } catch (ArrayIndexOutOfBoundsException e) {
       // catch (Exception e) // 모든 예외의 최고조상인 Exception
            System.out.println("ArrayIndexOutOfBoundsException");
        }  // try-catch의 끝
        System.out.println(6);
    }
}

1
2
3
ArrayIndexOutOfBoundsException
6

'Java > JAVA2' 카테고리의 다른 글

멀티 catch 블럭  (0) 2023.06.22
printStackTrace(), getMessage()  (0) 2023.06.22
프로그램 오류, 예외 클래스의 계층구조  (0) 2023.06.19
익명 클래스(anonymous class)  (0) 2023.06.19
내부 클래스의 제어자와 접근성  (0) 2023.06.18