어떠한 원인으로 인해 비정상적인 동작이 발생하고 프로그램이 종료되는 경우를 오류가 발생했다고 한다.
이러한 경우에는 컴파일 시 생기는 컴파일 오류와 런타임 오류가 있다.
가장 일반적으로 사용되는 예외처리로 try구문에는 발생 가능성이 있는 문장으로 넣어주고, catch 구문에는 어떻게 처리할 것인가를 작성한다.
형식
try { 예외 발생 가능성이 있는 문장 } catch(예외의 종류) { 예외가 발생하면 처리할 문장 }
예시
public class ExceptionExam { public static void main(String[] args) { int i = 10; int j = 0; try{ int k = i / j; System.out.println(k); }catch(ArithmeticException e){ System.out.println("0으로 나눌 수 없습니다. : " + e.toString()); }finally { System.out.println("오류가 발생하든 안하든 무조건 실행되는 블록입니다."); } } }
오류가 발생할 예상 부분에 try라는 블록으로 감싼 후, 예외를 catch 라는 블록으로 처리한다.
오류가 발생했던 안했든 무조건 실행되는 finally 라는 블록을 가질 수 있지만, 생략 가능하다.
예외처리를 강제적으로 발생시키고, 예외를 떠넘긴다.
throw는 예외를 발생시키는 키워드이며 throws는 예외를 떠넘기는 방식을 사용합니다.
throws 는 메소드 선언부 맨 끝에 작성하며, 메소드에서 try-catch를 통해 처리되지 않은 예외를 호출한 곳으로 떠넘기는 역할을 한다.
떠넘긴 예외는 JVM에서 최종적으로 처리를 하지만 권장 사항은 아니다.
예시
public static void main(String[] args) { int i = 10; int j = 0; try{ int k = divide(i, j); System.out.println(k); } catch(ArithmeticException e){ System.out.println("0으로 나눌수 없습니다."); } } public static int divide(int i, int j) throws ArithmeticException{ int k = i / j; return k; }
유익한 글이었습니다.