12일차
오류(Error) vs 예외(Exception)
오류(Error)는 일반적으로 회복이 불가능한 문제에러가 발생한 경우 우리는 어떠한 에러로 프로그램이 종료되었는지를 확인하고 대응예외(Exception)는 일반적으로 회복이 가능한 문제예외 발생과 try-catch, finally 문
예외 정의
예외 클래스를 만들어 예외를 정의
class OurBadException extends Exception { public OurBadException() { super("위험한 행동을 하면 예외처리를 꼭 해야합니다!"); } }
throw, throws
throw
-메서드 안에서, 실제로 예외 객체를 던질 때 사용하는 예약어
-실제로 던지는 예외 객체 하나와 같이 써야함
-일반 메서드의 return 키워드처럼 throw 아래의 구문들은 실행되지 않고, throw문과 함께 메서드가 종료
throws
-메서드 이름 뒤에 붙어 이 메서드가 어떠한 예외사항을 던질 수 있는지 알려주는 예약어
-여러 종류의 예외사항을 적을 수 있음
class OurClass { private final Boolean just = true; // 신규 문법 throws! public void thisMethodIsDangerous() throws OurBadException { if (just) { // 신규 문법 throw! throw new OurBadException(); } } }
- 메서드를 선언할 때, 메서드가 위험하다는 것을 미리
예측해야 합니다.예측이 되어 있다면, 실제로throw키워드와 함께 이 메서드가 위험하다고 알려야 합니다.
handlingtry{}catch () {}()에 예외 클래스를 받아서 처리할지 정의try{}실행중 발생된 ()정의된 예외클래스가 났을때 실행할 코드를 넣음finally{}에 마지막 반드시 실행될 코드를 넣음public class StudyException {
public static void main(String[] args) {
OurClass ourClass = new OurClass();
try {
// 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
// "시도" 해보는 코드가 들어가는 블럭입니다.
ourClass.thisMethodIsDangerous();
} catch (OurBadException e) {
// 2. 예외가 발생하면, "잡아서" handling 합니다.
// 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
// 예외가 발생한 줄에서 바로 코드 실행을 멈추고
// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
System.out.println(e.getMessage());
} finally {
// 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
// 무조건 실행되는 코드가 들어가는 블럭입니다.
System.out.println("우리는 방금 예외를 handling 했습니다!");
}
}
}