프로그램 개발자가 필요에 의해 직접 선언한 예외 클래스
예외클래스는 반드시 Exception 클래스를 상속받아 작성 - 일반예외
RuntimeException 클래스를 상속받아 작성 가능 - 실행 예외
예외 클래스로 객체를 생성하여 인위적 예외 발생
형식) throw new 예외클래스(값, 값, ...);
=> 예외클래스의 매개변수(예외메세지)가 작성된 생성자로 객체 생성
인위적으로 발생되는 예외에 대한 예외클래스는 직접 작성하여 사용하는 것을 권장
=> 발생되는 예외를 명확히 구분하여 예외처리 가능
프로그램 개발자가 필요에 의해 직접 선언한 예외 클래스
public class PasswordMismatchException extends RuntimeException {
// 예외처리에 필요한 값이 필요할 경우 필드 생성
// private static final long serialVersionUID = 1L;
// 필요하지 않을 경우 필드, 메소드 생성 안해도 됨
public PasswordMismatchException() {
}
public PasswordMismatchException(String message) {
// super 키워드를 사용하여 부모클래스의 생성자를 호출하여 객체를 생성할 때
// 예외메세지를 전달하여 부모클래스 객체에 예외메세지 저장
super(message);
}
}
public class PasswordMatchApp {
public static void main(String[] args) {
/*// 비밀번호가 저장된 변수
int password = 123456;
Scanner sc = new Scanner(System.in);
System.out.println("비밀번호 입력 >> ");
int number = sc.nextInt();
if(number == password){
System.out.println("[결과] 키보드로 입력한 비밀번호가 맞습니다.");
} else {
System.out.println("[결과] 키보드로 입력한 비밀번호가 맞습니다.");
}
sc.close();
*/
Scanner sc = new Scanner(System.in);
int password = 123456;
try {
System.out.println("비밀번호 입력 >> ");
int number = sc.nextInt();
if(number != password){
throw new PasswordMismatchException("[결과] 키보드로 입력된 비밀번호가 틀립니다.");
}
System.out.println("[결과] 키보드로 입력한 비밀번호가 맞습니다.");
} catch (InputMismatchException e) {
System.out.println("[에러] 숫자만 입력 가능합니다.");
} catch (PasswordMismatchException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println("[에러] 예기치 못한 예외가 발생했습니다.");
} finally {
sc.close();
}
}
}