프로그래밍 언어/JAVA

JAVA) 예외 처리 try~catch, throws, 사용자 정의 예외

luana_eun 2022. 3. 15. 10:40
728x90

try ~ catch ~ finally

try {
	예외 발생 가능성이 있는 코드
} catch(예외 종류) {
	해당 예외 발생시 실행할 코드
} finally {
	예외가 발생하든 안하든 무조건 실행할 코드
}

if ~ else if ~ else 와 비슷하다. 

try 문에 예외가 발생할 수 있는 코드를 넣고, 예외가 발생할 경우 대처 방안을 catch에 넣는다. 

각 예외 종류에 따라 다르게 처리하고 싶으면 else if() 처럼 catch()를 여러 개 둘 수 있다. 

여기까지는 if문과 똑같지만 마지막이 다르다. 

 

if문의 경우, 앞에서 조건이 해당되는경우 마지막 else문은 실행하지 않지만, 

try문의 finally는 앞에서 실행이 다 된 이후에 무조건 finally문을 실행한다. 

 

catch문에는 예외발생시 실행할 코드를 넣는데 보통 어떤 예외인지 출력하는 코드를 작성한다. 

1) e.getMessage() : 예외 발생 원인

2) e.toString() :  예외 종류 + 예외 발생 원인

3) e.printStackTrace();  예외 종류 + 예외 발생 원인 + 발생 위치

                              System.out.println으로 출력하지 않아도 출력된다. 

try {
	String str = null;
	System.out.println(str.length());
} catch(NullPointerException e) {
	System.out.println("1번: " + e.getMessage());
	System.out.println("2번: " + e.toString());
	e.printStackTrace();
}

 


throws 예외 던지기

예외 발생에 대한 책임을 자신을 호출하는 다른 함수에게 던진다. 

다른 함수에게 책임을 던짐으로써 나 자신은 예외 처리에 대한 책임이 없어진다. 

접근제한자 리턴타입 메소드이름() throws 예외클래스명 { }
public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
        int n = Integer.parseInt(bf.readLine());
        int count = 0;
}

 

 


사용자 정의 예외

접근제한자 리턴타입 메소드이름() throws 예외 { 
	throw new 예외("예외 메시지");
}

입력값이 0~100이외의 값을 입력하면 외예를 발생시키려한다. 

public static void grade(int score) throws Exception{
	if(score < 0 || score > 100) {
		throw new Exception("점수 입력 오류");
		// throw키워드로 사용자 정의 예외를 처리한다. 
	}
}
public static void main(String[] args) {
	int score = 101;
		
	try {
		grade(score);
	} catch (Exception e) {
		// 입력이 0보다 작고 100보다 크면 
		System.out.println(e.getMessage());		// "점수 입력 오류" 출력
	}
}

 

728x90