class OurBadException extends Exception {
public OurBadException() {
super("위험한 행동을 하면 예외처리를 꼭 해야합니다!");
}
}
📌 Exception을 상속받아서 구체적인 예외사항 정의
📌 super(...): 부모클래스의 생성자 호출 => 생성자를 호출하는 데 안에 들어가는건 매개변수
class OurClass {
private final Boolean just = true;
public void thisMethodIsDangerous() throws OurBadException {
if (just) {
throw new OurBadException();
}
}
}
📌 thisMethodIsDangerous() 이 메소드가 위험하다는 것을 알림
📌 위 메소드가 실행될 때는 just로 들어왔다고 한다면 새로운 OurBadException()을 만들어서 던짐
📌 던질 수 있는 이유: throws OurBadException 플래그를 달아줬기 때문에
=> 메소드를 선언할 때, 이 메소드가 위험하다는 것을 미리 에측해야 함.
그리고 예측이 되어 있다면, 실제로 throw 키워드와 함께 이 메소드가 위험하다고 알려야 함.
public class StudyException {
public static void main(String[] args) {
OurClass ourClass = new OurClass(); // 인스턴스 화
try {
// 일단 메소드 실행
// this-메소드가 위험하다는 것을 throws OurBad-로 플래그 달아 놓았기 때문에 그냥 호출하면 안됨 => try-catch, finally구문 사용해야함
ourClass.thisMethodIsDangerous();
} catch (OurBadException e) {
// () -> 어떤 종류의 예외 사항을 catch할 것인지
// 소괄호 안에는 인스턴스화해서 들어가야함
// 예외가 발생하면 catch해서 핸들링
// 예외가 발생하면 바로 코드 실행 멈추고 이 블록 내의 코드가 실행됨
System.out.println(e.getMessage());
} finally {
// 무조건 실행되는 코드가 들어가는 블럭
System.out.println("우리는 방금 예외를 handling 했습니다!");
}
}
}
** 1개의 try문에 여러 개의 catch문 사용 가능
📌 위의 경우는 Checked Exception
📍 인스턴스 멤버 & 클래스 멤버