- Error : 일반적으로 프로그래머가 처리할 수 없는 심각한 오류 , 컴파일 시점에 체크 불가능, 발생하면 프로그램은 비정상 종료되며 예측 불가능한 UncheckedException에 속한다 ex) 메모리 부족, 스택 오버플로우 등
- Exception : Error보다 비교적 경미한 오류이며, try-catch를 이용해 프로그램의 비정상 종료를 막을 수 있다.
CheckedException은 실행하기 전에 예측 가능한 예외를 말하고, 반드시 예외 처리를 해야한다. 컴파일러가 체크하는 예외이기 떄문에 반드시 예외 처리해야한다.
ex) IOException , ClassNotFoundException
UncheckedException은 실행하고 난 후에 알 수 있는 예외를 마하고, 따로 예외처리를 하지않아도 된다. 주로 프로그래머의 실수나 프로그램의 오류로 발생하는 예외이므로 예기치 않은 상황에서 발생 가능하며, 코드 상에서 사전에 예측하기 어렵다.
ex) NullPointerException, ArrayIndexOutOfBoundException 등
throw는 예외를 직접 발생시키는 데 사용됩니다.
메소드나 블록 내에서 예외를 생성하고 해당 예외를 호출자에게 던질 때 사용됩니다.
일반적으로 사용자가 직접 예외를 생성하고 던질 때, 또는 특정 조건이 충족될 때 예외를 발생시키는 데 사용됩니다.
throws는 메소드 선언부에서 사용되며, 해당 메소드가 어떤 예외를 던질 수 있는지 명시합니다.
메소드가 특정 예외를 발생시킬 수 있다는 것을 호출자에게 알리는 역할을 합니다.
메소드에 throws를 사용하면 해당 메소드를 호출할 때 예외 처리를 강제하게 됩니다. 호출하는 쪽에서 예외 처리를 해야 합니다.
package study;
public class MyException extends Exception {
public MyException() {
super("내가 만든 예외");
}
}
package study;
public class ExceptionTest {
static void callException() throws MyException {
throw new MyException();
}
public static void main(String[] args) {
try {
callException();
}catch (MyException e) {
System.out.println(e.getMessage());
}finally {
System.out.println("시스템 종료");
}
}
}
실행결과 : 내가 만든 예외
시스템 종료
Process finished with exit code 0
//코드출처: https://dev-coco.tistory.com/18 [슬기로운 개발생활:티스토리]