프로그램 오류
- 컴파일 에러 (compile-time error) : 컴파일 할 때 발생하는 에러
- 런타임 에러 (runtime error) : 실행할 때 발생하는 에러
- 논리적 에러 (logical error) : 작성 의도와 다르게 동작
java의 런타임 에러
1. 에러 (error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
2. 예외 (exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외처리 (exception handing)
정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것
Exception 클래스와 자손 클래스
사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
IOException / ClassNotFoundException ...
RuntimeException 클래스와 자손 클래스
프로그래머의 실수로 발생하는 예외
ArithmeticException (산술 계산) / ClassCastException (형변환) / NullPointerException (널포인터) / IndexOutOfBoundsException (배열범위 벗어남) ...
예외 처리하기 ( try - catch문 )
예외 발생시 이를 처리할 catch 블럭 찾아 내려감
- 일치하는 catch 블럭이 없으면 예외 처리 안됨
- Exception이 선언된 catch 블럭 : 모든 예외 처리됨 (가장 마지막 catch 블럭)
try {
// 예외가 발생할 가능성이 있는 문장들 작성
} catch (Exception1 e1) {
// Exception1이 발생했을 경우, 이를 처리하기 위한 문장 작성
} catch (Exception2 e2) {
// Exception1이 발생했을 경우, 이를 처리하기 위한 문장 작성
} catch (ExceptionN eN) {
// ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장 작성
}
* 괄호 생략 불가
< 예제 1 >
< 예제 2 >
1번 catch문이 일치하여 실행 후 바로 try-catch문 빠져나옴
( 만약 1번 catch문이 일치하지 않는다면 2번 catch문으로 넘어감 )
printStackTrace()와 getMessage()
printStackTrace() : 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있음
< 예제 >
멀티 catch블럭
내용이 같은 catch블럭을 하나로 합친 것
- 부모 | 자식 관계는 X (그냥 부모 하나쓰면 됨)
- 참조변수는 공통된 멤버만 사용 가능 (하나의 참조변수에 어떤 객체가 들어올지 모르기 때문에) ➔ 굳이 쓰겠다면 형변환 필요
try {
...
} catch (ExceptionA | ExceptionB e) {
e.methodA(); // 에러. Exception A에만 선언된 methodA()는 호출 불가
// A만 있는거 사용하려면 이렇게 형변환 해야함
if (e instanceof ExceptionA) {
ExceptionA e1 = (ExceptionA) e;
e1.methodA(); // OK.
} else { // if (e instanceof ExceptionB)
...
'JAVA > 자바의 정석' 카테고리의 다른 글
[자바의 정석 - 기초편] 9. (1) Object 클래스 ( equals(Object obj) / hashCode() / toString() ) (0) | 2023.12.04 |
---|---|
[자바의 정석 - 기초편] 8. (2) 예외 발생시키기 / checked예외 / unchecked예외 / 사용자 정의 예외 / 예외 되던지기 / 연결된 예외 (0) | 2023.12.02 |
[자바의 정석 - 기초편] 7. (12) 디폴트 메서드 / 내부 클래스 / 내부 클래스 제어자 / 익명 클래스 (0) | 2023.12.01 |
[자바의 정석 - 기초편] 7. (11) 인터페이스 장점 (0) | 2023.12.01 |
[자바의 정석 - 기초편] 7. (10) 인터페이스 ( 선언 / 상속 / 구현 / 다형성 ) (0) | 2023.12.01 |