예외 발생시키기
- 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음
Exception e = new Exception("고의로 발생시킴");
- 키워드 throw를 이용해서 예외를 발생시킨다.
public class Ex8_6 {
public static void main(String[] args) {
try{
Exception e = new Exception("고의로 발생시킴");
throw e;
} catch (Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
System.out.println("프로그램이 정상 종료");
}
}
>>>
고의로 발생시킴
프로그램이 정상 종료
java.lang.Exception: 고의로 발생시킴
at Ex8_6.main(Ex8_6.java:4)
Process finished with exit code 0
checked 예외, unchecked 예외
- checked 예외 : 컴파일러가 예외 처리 여부를 체크(예외 처리가 필수적)
- Exception 클래스와 그 자손들을 일컫는다.
- unchecked 예외 : 컴파일러가 예외 처리 여부를 체크 안함(예외 처리가 선택적)
- RuntimeException 클래스와 그 자손들을 일컫는다.
Example (checked 예외)
public class Ex8_6 {
public static void main(String[] args) {
throw new Exception();
}
}
>>>
java: unreported exception java.lang.Exception; must be caught or declared to be thrown
Example (unchecked 예외)
- 컴파일은 제대로 됨
- 컴파일은 잘 됐더라도, 실행시 예외가 발생한 모습
public class Ex8_6 {
public static void main(String[] args) {
throw new RuntimeException();
}
}
>>>
Exception in thread "main" java.lang.RuntimeException
at Ex8_6.main(Ex8_6.java:3)
이렇게 예외를 checked, unchecked로 나누는 이유가 뭘까?
- 예를들어
RuntimeException
자손 클래스로 IndexOutOfBoundsException
이 있다.
- 만약 모든 예외를 다 checked(필수 예외처리)로 다뤄야 한다면, 배열을 사용할 때마다 항상 try-catch로 묶어줘야 할 것이다.(예외 발생 가능성이 있기 때문)
References