예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
→ 에러는 어쩔 수 없지만 예외는 처리하자!
예외처리(exception handling)
정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
Exception 클래스들(+자손) : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
예) IOException, ClassNotFoundException
RuntimeException 클래스들(+자손) : 프로그래머의 실수로 발생하는 예외
예) ArithmeticException, ClassCastException, NullPointerException
예외 처리하기. try-catch 문
try블럭 내에서 예외가 발생한 경우
1) 발생한 예외와 일치하는 catch 블럭이 있는지 확인한다.
2) 일치하는 catch 블럭을 찾게 되면, 그 catch 블럭 내의 문장들을 수행하고 전체 try-catch 문을 빠져나가서 그 다음 문장을 계속 수행한다. 만일 일치하는 catch 블럭을 찾지 못하면, 예외는 처리되지 못한다. (프로그램 비정상종료)
try블럭 내에서 예외가 발생하지 않은 경우,
1) catch 블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.
printStackTrace()와 getMessage(): 예외가 발생했을 때 생성되는 예외 클래스의 인스턴스에는 발생한 예외에 대한 정보가 담겨져 있으며, 아래 메서드들을 통해서 이 정보들을 얻을 수 있다.
catch블럭의 괄호()에 선언된 참조변수를 통해 이 인스턴스에 접근할 수 있다. 이 참조변수는 선언된 catch블럭 내에서만 사용 가능함.
printStackTrace() : 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
예외 발생시키기
연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음
Exception e = new Exception("고의로 발생시켰음");
키워드 throw를 이용해서 예외를 발생시킨다.
throw e;
위 1, 2번을 하나로 합쳐서 사용.
throw new Exception("고의로 발생시켰음");
메서드에 예외 선언하기
예외를 처리하는 방법 :
1) try-catch문 (직접처리)
2) 예외 선언하기 (예외 떠넘기기. 알리기)
3) 감추기 (빈 catch block)