- 예외 상황 발생
- 에러와 관련된 정보를 가지고 있는 Exception 객체가 생성됨
- Exception 객체가 소멸되지 않으면 프로그램은 비정상적 종료
Checked Exception
: 컴파일 시에 예외 처리를 해 주었는지 체크하는 Exception
-> IOException
Unchecked Exception ( Runtime Exception )
: 프로그램 실행 중에 발생하는 Exception
ArithmaticException : 0으로 나누었을 때
NumberFormatException : 숫자로 변경될 수 없는 문자열을 숫자로 변경하려고 시도
NullPointerException : 참조 데이터형 변수의 값이 null인데 객체에 접근하려고 하는 경우
ArrayIndexOutOfBoundsException : 배열의 범위를 벗어난 인덱스 접근
ClassCastException : 객체의 형 변환 시, 잘못된 클래스로 변환할 때
try{
// Exception이 발생할 수 있는 구문
} catch ( Exception_클래스_타입 변수명 ) {
// Exception이 발생했을 경우 수행해야 하는 구문
}
try
catch
finally
: 메소드 내부에서 예외 발생 시 try-catch 블록으로 처리하는 것이 기본이지만, 메소드를 호출한 곳으로 예외를 떠넘길 수 있음
리턴타입 메소드명(매개변수,...) throws 예외클래스1, ... { }
throws 키워드가 붙은 메소드에서 해당 예외를 처리하지 않고 떠넘겼기 때문에 이 메소드를 호출하는 곳에서 예외를 받아 처리해야 함
: 일반 예외로 선언할 수도 있고, 실행 예외로 선언할 수도 있음
-> Exception의 자식 / RuntimeException의 자식 클래스로 선언
public class UserDefineException extends [Exception|RuntimeException]{
// 기본 생성자
public UserDefineException() {
}
// 예외 메세지를 입력받는 생성자
public UserDefineException(String message) {
super(message);
}
: throw 키워드와 함께 예외 객체를 제공하면 됨
void method() {
try {
throw new Exception("예외메세지");}
catch (Exception e) {
String message = e.getMessage();}
}
void method() throws Exception {
...
throw new Exception("예외메세지");
...
}
메소드 선언부에서는 throws : 예외 떠넘기기
코드 내부에는 throw : 예외 발생시키기