try~catch~finally
**try** { 예외의 발생이 예상되는 로직 } **catch** (예외클래스 인스턴스) { 예외가 발생했을 때 실행되는 로직 } **finally** { 예외여부와 관계없이 실행되는 로직 (예외와 관계없이 무조건적으로) }
- catch = 일종의 뒷수습 장치
- finally 사용은 필수적이지는 않다.
예시
public void divide(){ try { System.out.print("계산결과는 "); System.out .print(this.left/this.right); System.out.print(" 입니다."); } catch(Exception e){ System.out.println("오류가 발생했습니다 : "+e.getMessage()); // "/ by zero" } }
- try문에서 error 발생 시, 바로 중단하고 catch문으로 감
- 일종의 메소드라고 해도 크게 다르지 않을 것 같음
주의사항
예외처리의 순서
- try~catch문에서 상위 class를 하위 class보다 아래에 놓음으로써, 모든 예외처리를 거치도록 한다.
- try 블록에서 예외가 발생했을 때, 예외를 처리해 줄 catch 블록은 위에서부터 차례대로 검색된다. 상위 예외 class의 catch 블록이 위에 있다면, 하위 예외 class의 catch 블록은 실행되지 않는다.
- 가장 상위 예외처리 class인 Exception e를 위에 놓으면, 나머지 예외처리 class들은 실행되지 않는다.