JAVA/JAVA
Java | 예외 처리 try~catch~finally
pathas
2020. 2. 5. 17:45
Exception 예외 처리
예외가 발생했을 때 자바 프로그램이 정상적으로 실행되도록 예외를 처리하는 것
try~catch~finally
예외가 발생했을 때 예외를 어떻게 처리할 것인가를 결정하는 구문
형식
try {
// 예외 발생 가능성이 있는 코드
} catch([예외 처리 클래스명] [예외 처리 객체명]) {
// 예외 처리, 보통 예외 메세지 출력
} finally {
// 예외 발생과 상관없이 반드시 처리해야하는 코드
// ex) DB 연동 해제, 메모리 해제 구문
}
※ catch문은 여러 개 작성 가능
| 파이프 기호
catch()문에서 2개의 에러를 처리할 때 사용하는 기호
형식
catch([예외 처리 클래스명] | [예외 처리 클래스명] [예외 처리 객체명])
// catch(ArithmeticException | NumberFormatException e)
Exception Class
각각의 예외 클래스들을 포함하는 상위 클래스
- 예외가 하나인 경우에 Exception 클래스명만으로도 작성 가능
- Exception 클래스가 상위 클래스이기 때문에 그 외의 예외들은 자동 형 변환되어 인자로 전달 가능
- 복수의 catch문이 있는 경우 가장 마지막에 작성해야 함
Throwable Class Method
Catch 구문에서 자주 사용되는 Throwable 클래스 메소드
주로 예외에 대한 정보 메세지 출력
메소드 | 설명 |
---|---|
getMessage() | Throwable 클래스 일반 메소드, 객체명.getMessage()로 사용 가장 간단한 에러 메세지, 발생한 예외 내용만 출력 |
toString() | Throwable 클래스 일반 메소드, 객체명.toString()으로 사용 권장되는 방법, 발생한 예외 종류 출력 toString()을 생략하고 객체명으로만 출력해도 동일한 결과가 나옴 |
printStackTrace() | Throwable 클래스 일반 메소드, 객체명.printStackTrace()로 사용 발생한 예외의 종류와 문제가 있는 코드의 라인 출력 출력 코드 없이 단독으로 사용 |
예제
package j200205;
public class ExceptionTotal {
// 매개변수를 Run Configurations에서 설정
public static void main(String[] args) {
try { // 에러 발생 가능성이 있는 코드 작성
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
System.out.println("a: " + a + ", b:" + b);
System.out.println("a를 b로 나눈 몫: " + (a / b));
// 수식 예외 처리
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
// a = 9, b = 0
// / by zero
// 배열 첨자 예외 처리
} catch (IndexOutOfBoundsException e) {
System.out.println(e);
// a = 9
// java.lang.ArrayIndexOutOfBoundsException: 1
// 숫자 변환 실패 예외 처리
} catch (NumberFormatException e) {
System.out.println(e.toString());
// a = 9, b = c
// java.lang.NumberFormatException: For input string: "c"
// 모든 종류의 예외 처리 가능
} catch (Exception e) {
e.printStackTrace();
// a = 9, b = c
/*
바로 위의 catch문이 없는 경우
java.lang.NumberFormatException: For input string: "c"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at j200205.ExceptionTotal.main(ExceptionTotal.java:9)
*/
// 예외 발생과 상관 없이 반드시 실행
} finally {
System.out.println("예외 발생과 상관 없이 반드시 실행");
}
}
}
예외가 발생했을 때 이를 처리할 수 있는 구문인 try~catch~finally문에 대해 알아보았습니다.
catch 구문에서는 예외 자체를 해결한다기보다 예외의 정보를 얻어내고,
예외는 실제로 예외가 발생한 곳에서 해결된다고 보면 조금 더 이해하기가 쉬운 것 같습니다.