✓ 예외 클래스
💡 자바는 예외를 클래스로 관리한다. 예외가 발생하면 해당 예외 클래스로 객체를 생성한다.
예외의 두 종류
- 일반 예외: 컴파일러 체크 예외. 컴파일하는 과정에서 예외 처리 코드가 있는지 검사. (RuntimeException의 하위 클래스가 아님)
- 실행 예외: 컴파일러 넌 체크 예외. 실행 시 예측할 수 없이 갑자기 발생. 컴파일 과정에서 예외 처리 코드가 있는지 검사하지 않는다.(RuntimeException 의 하위 클래스)
1) NullPointerException: 객체 참조가 없는 상태. null값을 갖는 참조 변수로 객체 접근 연산자(도트.) 를 사용했을 때 발생
2) ArrayIndexOutOfBoundsException: 배열에서 인덱스 범위를 초과했을 경우.
3) NumberFormatException: 문자열을 숫자로 변환할 때 숫자로 변환될 수 없는 문자가 포함된 경우.
4) ClassCastException: 상속/구현관계 사이 잘못된 타입 변환
❗️ 실행 예외는 꼭 예외 처리 코드를 작성해 줘야 프로그램이 예외를 만났을 때 곧바로 종료되는 걸 막을 수 있다.
✓ 예외 처리
try-catch-finally 블록
try {
// 예외 발생 가능 코드
} catch(예외클래스 e) {
// 예외 처리
// 예외가 발생했을 때만 실행되는 코드
} finally {
// 항상 실행
// 생략 가능
}
- finally는 try, catch 블록 사이에 return문이 있더라도 항상 실행된다.
- 다중 catch: 발생할 수 있는 다양한 예외들의 처리코드를 각각 작성. 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다.
예외 떠넘기기 throws
- throws 키워드를 메소드 선언부 끝에 작성
- 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할.
리턴타입 메소드이름(매개변수, ...) throws 예외클래스1, 예외클래스2, ... { }
리턴타입 메소디이름(매개변수, ...) throws Exception { }
throws가 붙어있는 메소드는 반드시 try 블록 내에서 호출되고 catch 블록에서 떠넘겨 받은 예외를 처리해야 한다.
public static void main(String[] args) {
try {
findClass();
} catch(ClassNotFoundException e) {
System.out.println("클래스가 존재하지 않습니다.");
}
}
public static void findClass() throws ClassNotFoundException {
Class clazz = Class.forName("java.lang.String2");
}
'컴퓨터 & 코딩 > Java' 카테고리의 다른 글
[혼공학습단 10기][혼공자] 상속 / 타입 변환과 다형성 / 추상 클래스 (0) | 2023.07.13 |
---|---|
[혼공학습단 10기][혼공자] 3주차 미션 (0) | 2023.07.12 |
[혼공학습단 10기][혼공자] 중첩 클래스 / 중첩 인터페이스 / 익명 객체 (0) | 2023.07.10 |
[혼공학습단 10기][혼공자] 인터페이스 (0) | 2023.07.07 |
[혼공학습단 10기][혼공자] 2주차 미션 (0) | 2023.07.06 |