Java/기본
[Java] 예외처리103 - 예외강제 발생시키기 & 사용자 정의 예외
coding captain
2021. 6. 20. 20:27
예외강제 발생
컴파일 과정 혹은 실행에는 문제가 없지만 인위적으로 예외 발생시키는 것을 말한다. throw를 사용하여 발생시킨다.
강제로 예외 발생시키는 과정은 과부하를 주기 때문에 자주 사용하지는 않는다. 앞선 포스팅에서 설명하였듯이 throws 를 사용하여 예외객체를 전달하는 이유가 시스템 과부하를 줄이기 위함을 염두에 둔다.
참고로 throws 와 throw 는 사용목적이 다르니 용어 확실히 정리해두자
throws | 예외객체를 호출한 쪽에 전달하기 위해 사용 throws : 3인칭. 제3자가 처리하도록 던짐 |
throw | 예외를 일부러 발생시키기 위해 사용 throw : 1인칭. 내가 예외를 발생시킴 |
형식
throw new [예외객체];
예제
class throwEx {
public static void main(String[] args){
throwEx th = new throwEx();
try{
th.getWarning(15);
} catch(Exception e){
e.printStackTrace();
}
}
//예외가 발생하면 메서드를 호출한 곳으로 예외객체를 전달함
void getWarning(int a) throws Exception{
if(a > 19){
System.out.println("입장가능합니다");
} else{
//강제로 예외를 발생시킴
throw new Exception("미성년자입니다");
}
}
}
사용자 정의 예외
표준으로 정해진 예외 말고 프로그래머가 직접 예외 클래스를 생성하여 사용하는 것을 말한다.
예제
1) Exception 클래스를 상속받아 SelfException 라는 예외 클래스를 생성하였다.
class SelfException extends Exception{
String msg = "미성년자는 입장불가";
public selfException(String msg) {
super(msg);
}
}
2) 새로 생성한 SelfException 의 예외가 발생하도록 인자값을 넣었다.
public class SelfExceptionTest {
void getWarning(int a) throws selfException{
if(a > 19){
System.out.println("입장가능합니다");
} else{
throw new selfException("미성년자입니다");
}
}
public static void main(String[] args) {
SelfExceptionTest st = new SelfExceptionTest();
try {
st.getWarning(25);
st.getWarning(15); //예외 발생
} catch (Exception e) {
e.printStackTrace();
}
}
}