코딩 기록들

[자바의 다양한 기능들] 6-2. 예외처리하기와 미루기(2) 본문

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 블록은 맨 마지막에 위치해야 함