[Chapter8. 예외처리]
컴파일에러 - 컴파일 할 때 발생
런타임에러 - 프로그램 실행 도중 발생
논리적에러 - 실행을 되지만, 의도와 다르게 동작
에러 - 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외 - 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
전체 예외는 Exception클래스들, RuntimeException클래스들 로 나뉨
try-catch문
try {
//예외발생 가능성 있는 문장
} catch(Exception1 e1 {
} catch(Exception2 e2 {
}
-> try블럭 내에서 예외가 발생한 경우, 발생한 예외와 일치하는 catch블럭이 있는지 확인하고, 일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 일치하지 않을 경우 예외 처리 x
printStackTrace() : 예외발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메시지 출력
getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메세지
throw 프로그래머가 고의로 예외를 발생시킬 수 있음 --?
throws 메서드에서 예외 선언
-> 예외를 처리하는 것이 아니라, 예외가 발생할 가능성이 있는 메서드를 호출한 메서드에게 예외를 전달하여 예외처리를 떠맡기는것
-> 예외를 전달받은 메서드가 또다시 자신을 호출한 메서드에게 전달 할 수 있음, 제일 마지막에 있는 main메서드에서도 예외가 처리되지 않으면, main메서드마저 종료되어 프로그램 전체 종료
-> 예외가 처리된 것은 아니고 예외를 단순히 전달만 하는것
-> 어느 한 곳에서는 반드시 try-catch문으로 예외처리해야함
try-catch 와 throws 차이
try-catch문 : 예외를 받아서 처리, catch구문에서 사용자가 흐름을 능동적으로 제어
throws : 예외를 던지는 것, 위임 -> 예외를 없애지 못하고 호출한 곳으로 예외 전달. 예외를 전달받은 메서드는 다시 예외 처리 책임 발생.
=> 개발자가 직접정의하는 예외를 발생시키고 싶은 경우 사용