Java - 메서드 예외선언하기(처리방법), finally 블럭

춤추는개발자·2022년 11월 25일
0

Java 정리

목록 보기
25/59

메서드에서 예외 선언하기

  • 예외를 처리하는 방법 :
    1. try-catch문 사용
    2. 예외 선언하기,떠넘기기
    3. 은폐,덮기 (빈 catch 블럭을 사용하는 것), 무시하기
  • 메서드가 호출시 발생가능한 예외를 호출하는 쪽에 알리는 것
  • 메서드를 throws를 통해 예외처리를 하지 못하고 던지다가 main 메서드한테 던진다. main 메서드에서도 예외처리를 하지 못하면 마지막으로 JVM에게 예외를 넘겨준다. JVM이 예외 처리를 한다. 하지만 이것은 예외처리를 한것이 아니다. 예외처리를 할려면 try-catch문이 있어야 한다.

메서드 예외 발생 시 예외 처리 방법

1. 예외가 발생한 메서드 내에서 예외 처리 하는 방법

class JavaExercise_48 {
    public static void main(String[] args) { // main 메서드에서 호출한 메서드에서 예외를 처리하는 경우
        method1();
    }
     static void method1(){
        try {
            throw new Exception();
        } catch (Exception e){
            System.out.println("method1() 메서드에서 예외 처리가 되었습니다.");
            e.printStackTrace();
        }
     }
    }
출력 결과 :
method1() 메서드에서 예외 처리가 되었습니다.
java.lang.Exception
	at javaexercise.JavaExercise_48.method1(JavaExercise_48.java:8)
	at javaexercise.JavaExercise_48.main(JavaExercise_48.java:4)

-> 위의 방법은 호출한 메서드에서 예외가 발생하면 메서드 내에서 예외 처리를 하는 방법이다. 이렇게 하면 호출한 메서드에서 예외가 발생했는지 그 사실조차 알수가 없다.

2. 예외가 발생한 메서드를 호출한 메서드에서 예외를 넘겨 받아 예외 처리를 하는 방법

class JavaExercise_49 {
    public static void main(String[] args) { // main 메서드에서 호출한 메서드에서 예외를 선언하고 예외 처리를 하지 않고 main 메서드에 예외를 넘겨주어 main 메서드에서 예외를 처리하는 경우
        try {
            method1(); // 메서드 호출
        } catch (Exception e){
            System.out.println("main 메서드에서 예외 처리!");
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
     static void method1() throws Exception { // 예외를 main 메서드에 넘겨줌
        throw new Exception("예외처리!"); // 예외 선언
     }
    }
출력 결과 : 
main 메서드에서 예외 처리!
예외처리!
java.lang.Exception: 예외처리!
	at javaexercise.JavaExercise_49.method1(JavaExercise_49.java:13)
	at javaexercise.JavaExercise_49.main(JavaExercise_49.java:5)

-> 위의 코드는 호출한 메서드가 예외가 발생하면 예외를 호출한 메서드의 main 메서드로 넘겨주어 main 메서드에서 예외를 처리하는 방법 입니다. 이 방법을 사용하면 예외가 발생한 메서드 라인에서 예외가 발생했다고 간주하여 예외 처리를 하게 됩니다.

어느 쪽에서 예외 처리를 하는게 적합한지 판단하여 try-catch문을 넣어 예외 처리를 해주면 된다.

finally 블럭

  • 예외 발생여부와 관계없이 수행되어야 하는 코드를 넣는다.
  • try-catch문에 맨 마지막에 있어야 한다.

예외가 발생한 경우에는 try -> catch -> finally 순으로 실행이되고 예외가 발생하지 않은 경우에는 try -> finally 순으로 실행 된다.

0개의 댓글