컴파일 에러(compile-time-error) : 컴파일 할 때 발생하는 에러
런타임 에러(runtime-error) : 실행할 때 발생하는 에러
논리적 에러(logical-error) : 작성 의도와 다르게 동작
- 자바 컴파일러 : 1.구문체크 2.번역 3.최적화
- 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
- 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
- 에러는 어쩔 수 없지만, 예외는 처리하자.
예외처리(exception handling)의
정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것
- Object : 최고 조상
- Throwable : 클래스. 모든 오류의 조상
- Error : 심각한 오류
- Exception : 미약한 오류
- OutOfMemoryError : 메모리 부족
예외처리(exception handling)의
정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것try { // 예외가 발생할 가능성이 있는 문장을 넣는다. } catch (Exception e1) { // Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다. } catch (Exception e2) { // Exception2가 발생했을 경우, 이를 처리하기 위한 문장을 적는다. } catch (Exception eN) { // ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다. }
- if문과 달리, try블럭이나 catch블럭 냉레 포함된 문장이 하나뿐이어도 괄호{}를 생략할 수 없다.
① try블럭 내에서 예외가 발생한 경우,
1. 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.
2. 일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch블럭을 찾지 못하면, 예외는 처리되지 못한다.
② try블럭 내에서 예외가 발생하지 않은 경우,
1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.
- 예외가 발생하지 않았기 때문에 4를 출력하지 않는다.
- 예외발생(0으로 나누는 것이 불가능!)으로 인해 2를 출력하지 않고, catch문으로 가서 3을 출력하고 try-catch문을 빠져 나와서 4를 출력한다.
예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감
Exception이 선언된 catch블럭은 모든 예외처리 (마지막 catch블럭)
- 예외가 발생했으므로 4는 출력하지 않고, ArithmeticException이기 때문에 아래의 Exception을 처리하지 않는다.
- Exception은 모든 예외의 최고 조상이기 때문에 마지막에 와야 한다. (= 모든 예외 처리 가능)