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)
-> 위의 방법은 호출한 메서드에서 예외가 발생하면 메서드 내에서 예외 처리를 하는 방법이다. 이렇게 하면 호출한 메서드에서 예외가 발생했는지 그 사실조차 알수가 없다.
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문을 넣어 예외 처리를 해주면 된다.
예외가 발생한 경우에는 try -> catch -> finally 순으로 실행이되고 예외가 발생하지 않은 경우에는 try -> finally 순으로 실행 된다.