Cute Running Puppy

Language/[Java] 자바 완전 정복

5주차_14.예외처리

R.silver 2022. 2. 24. 22:08
반응형

예외 

예외와 에러의 차이점 

예외 에러
상황에 따라 개발자가 해결할 수 있는 오류  개발자가 해결할 수 없는 오류
오류가 발생했을 때 차선책을 선택할 수 있는 것  자바 가상 머신 자체에서 발생하는 오류 
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("예외 메시지");

 

반응형