반응형
예외
예외와 에러의 차이점
예외 | 에러 |
상황에 따라 개발자가 해결할 수 있는 오류 | 개발자가 해결할 수 없는 오류 |
오류가 발생했을 때 차선책을 선택할 수 있는 것 | 자바 가상 머신 자체에서 발생하는 오류 |
0으로 나누는 것은 피할 수 있다 | 메모리가 꽉 차거나 쓰레드가 죽는 것은 피할 수 없다 |
예외 클래스의 상속 구조
일반 예외 | 실행 예외 |
Exception 클래스에서 직접 상속 | RuntimeException 클래스를 상속 |
컴파일 전에 예외 발생 문법을 검사 | 실행 할 때 발생하는 예외 |
예외 처리 안하면 문법 오류 | 예외처리 안해도 문법 오류 안남 |
일반 예외 클래스
예외 처리를 하지 않으면 문법 오류 발생
interruptedException | Thread.sleep(시간) | 일정 시간 동안 해당 쓰래드를 일시 정지 상태로 만듦 |
classNotFoundException | Class.forName("패키지명.클래스명") | 동적으로 메모리에 로딩하는 메서드 |
IOException | write(), read() | 파일을 읽고 쓸때 발생 |
FileNotFoundException | 파일이 해당 경로에 없을 때 발생 | |
CloneNotSupportedException | clone() | clonable 인터페이스를 상속하지 않은 클래스의 객체를 복사하기 위해 호출 시 발생 |
실행 예외
예외 처리 없이 컴파일이 가능하지만 실행 중 예외가 발생하면 프로그램 강제 종료
ArithmeticException | 수학식에서 절대 존재할 수 없는 연산을 했을 때 발생 |
ClassCastException | 다운캐스팅이 불가능한 상황에서 다운캐스팅을 시도할 때 발생 |
ArrayIndexOutOfBoundsExeption | 배열의 인덱스를 잘못 사용했을 때 발생 |
NumberFormatException | 문자열을숫자, 실수로 변환 할 대 문자열이 변환하고자 하는 숫자 형식이 아닐 때 발생 |
NullPointerException | 참조 변수가 실제 객체를 가리키지 않은 상황에서 필드나 메서드를 호출할 때 발생 |
예외 처리
예외 처리 문법
예외 처리 문법 구조
try {
// 일반 예외, 실행 예외 발생 가능 코드
} catch (예외_클래스명 참조_변수명) {
// 예외가 발생했을 때 처리
} finally { // 생략 가능
// 예외 발생 여부에 상관없이 무조건 실행
}
catch() {} 블록도 예외 타입에 따라 여러 개를 포함할 수 있다.
리소스 자동 해제 예외 처리
finally {} 블록은 항상 실행해야 하는 기능이 있을 때 사용하는 블록
가장 대표적인 기능은 사용하지 않는 자원을 반납하는 것
예외 전가
예외 전가 문법
예외 전가 구조
리턴_타입 메서드명(입력매개변수) throws 예외_클래스명 {
// 예외 발생 코드
}
사용자 정의 예외 클래스
사용자 정의 예외 클래스 생성 방법
1. 예외 클래스를 사용자가 직접 정의
2. 작성한 예외 클래스를 이용해 객체 생성
3. 예외 상황에서 예외 객체를 던진다 (throw)
// 1단계 - 사용자 정의 예외 클래스 작성
class MyException extends Exception {
MyException() {
}
MyException(String s) {
super(s); // 부모 생성자 호출
}
}
// 2단계 - 사용자 정의 예외 클래스 객체 생성
MyException me1 = new MyException();
MyException me2 = new MyException("예외 메시지");
// 3단계 - 예외 상황에서 예외 객체 던지기
throw me1;
throw me2;
throw new MyException();
throw new MyException("예외 메시지");
반응형
'Language > [Java] 자바 완전 정복' 카테고리의 다른 글
6주차_16. 제네릭 (0) | 2022.03.01 |
---|---|
5주차_15.쓰레드 (0) | 2022.02.24 |
5주차_13.이너 클래스와 이너 인터페이스 (0) | 2022.02.24 |
4주차_12. 추상 클래스와 인터페이스 (0) | 2022.02.10 |
4주차_11. 자바 제어자 2 (0) | 2022.02.10 |