Java
[자바의 다양한 기능들] 6-2. 예외처리하기와 미루기(2)
코딩펭귄
2024. 1. 9. 19:27
예외 처리 미루기
- 예외 처리는 예외가 발생하는 문장에서 try-catch 블록으로 처리하는 방법과 이를 사용하는 부분에서 처리하는 방법 두 가지가 있음
- throws를 이용하면 예외가 발생할 수 있는 부분을 사용하는 문장에서 예외를 처리할 수 있음
public class ThrowsException {
// 일부러 exception 발생하기 위해 만든 메소드
// throws : 메소드를 쓰는 쪽에서 exception 핸들링 함
public Class loadClass(String fileName, String className) throws FileNotFoundException, ClassNotFoundException{
FileInputStream fis = new FileInputStream(fileName); //file open - FileNotFoundException 발생
Class c = Class.forName(className); //load class - ClassNotFoundException 발생
return c;
}
public static void main(String[] args) {
ThrowsException test = new ThrowsException(); // main에서 exception은 throws 보다는 try-catch로 함
try {
test.loadClass("a.txt", "java.lang.String");
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
// 예상할수 없는 에러를 핸들링하고싶을때 : 최상위 exception 사용 = default 처리하는것
// 최상위(default) exception은 다른 예외보다 윗순서에 적으면 안됨(제일 아래 블록에 써야됨)-> 오류발생(모든예외의 최상위이므로 모두 업캐스팅되므로)
}catch (Exception e) {
e.printStackTrace();
}
System.out.println("end") // 비정상종료된게 아닌, exception이 핸들링 된거다!
}
}
하나의 try{}블록에서 예외가 여러개 발생하는 경우
여러개의 예외가 발생하는 경우 예외를 묶어서( | ) 하나의 방법으로 처리할 수도 있고,
try {
test.loadClass("a.txt", "java.lang.String");
} catch (FileNotFoundException | ClassNotFoundException e) {
e.printStackTrace();
}
각각의 예외를 따로 처리할 수도 있음
try {
test.loadClass("a.txt", "java.lang.String");
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
** Exception 클래스를 활용하여 defualt 처리를 할 때 Exception 블록은 맨 마지막에 위치해야 함