문서의 이전 판입니다!
try ~catch문의 구조
try { // 예외가 발생할 가능성이 있는 문장 코드 } catch (Exception1 e1) { // Exception1이 발생할 경우, 실행될 문장 } catch (Exception1 e2) { // Exception2이 발생할 경우, 실행될 문장 ... } catch (ExceptionX eX){ // ExceptionX가 발생할 경우, 실행될 문장 }
package chapter11; public class ExceptionEx0 { public static void main(String[] args) { System.out.println(1); System.out.println(2); System.out.println(3/0); System.out.println(4); System.out.println(5); System.out.println(6); } }
package chapter11; public class ExceptionEx { public static void main(String[] args) { System.out.println(1); try { System.out.println(2); System.out.println(3/0); System.out.println(4); } catch(ArithmeticException e) { System.out.println(5); } System.out.println(6); } }
try 블록 안에서 예외가 발생한 경우 |
---|
- 발생한 예외와 일치하는 catch 문이 있는지 확인한다. |
- 만약 일치하는 catch문이 있다면, 해당 catch문의 블럭 내의 실행문을 실행하고 전체 try-catch 구문이 종료된다. 만약 일치하는 catch문이 없으면 예외 처리를 하지 못한다. |
try 블록 안에서 예외가 발생하지 않은 경우 |
- catch 구문을 모두 확인하지 않고, 전체 try-catch 구문이 종료된다. |
package chapter11; public class ExceptionEx2 { public static void main(String[] args) { System.out.println(1); try { System.out.println(2); System.out.println(3); System.out.println(4); } catch(ArithmeticException e) { System.out.println(5); // Death 코드 (실행될 일이 없다) } System.out.println(6); } }
다중 catch문
package chapter11; public class ExceptionEx4 { public static void main(String[] args) { try { int[] arr = {1,2,3}; System.out.println(arr[2]); System.out.println(3/1); Integer.parseInt("a"); } catch(ArithmeticException e) { System.out.println("0으로 나눌 수 없음"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("인덱스 범위 초과"); } } }
catch 문의 배치 순서 |
---|
자식 Exception > Exception 순으로 배치 |
finally문
package chapter11; public class ExceptionEx3 { public static void main(String[] args) { System.out.println("DB연결 시작"); try { System.out.println("DB작업"); System.out.println(3/0); } catch(Exception e) { System.out.println("DB작업 중 예외발생"); } finally { System.out.println("DB연결 종료"); } } }