-
Java | 예외 처리 try~catch~finallyJAVA/JAVA 2020. 2. 5. 17:45
Exception 예외 처리
예외가 발생했을 때 자바 프로그램이 정상적으로 실행되도록 예외를 처리하는 것
try~catch~finally
예외가 발생했을 때 예외를 어떻게 처리할 것인가를 결정하는 구문
형식
try { // 예외 발생 가능성이 있는 코드 } catch([예외 처리 클래스명] [예외 처리 객체명]) { // 예외 처리, 보통 예외 메세지 출력 } finally { // 예외 발생과 상관없이 반드시 처리해야하는 코드 // ex) DB 연동 해제, 메모리 해제 구문 }
※ catch문은 여러 개 작성 가능
| 파이프 기호
catch()문에서 2개의 에러를 처리할 때 사용하는 기호
형식
catch([예외 처리 클래스명] | [예외 처리 클래스명] [예외 처리 객체명]) // catch(ArithmeticException | NumberFormatException e)
Exception Class
각각의 예외 클래스들을 포함하는 상위 클래스
- 예외가 하나인 경우에 Exception 클래스명만으로도 작성 가능
- Exception 클래스가 상위 클래스이기 때문에 그 외의 예외들은 자동 형 변환되어 인자로 전달 가능
- 복수의 catch문이 있는 경우 가장 마지막에 작성해야 함
Throwable Class Method
Catch 구문에서 자주 사용되는 Throwable 클래스 메소드
주로 예외에 대한 정보 메세지 출력메소드 설명 getMessage() Throwable 클래스 일반 메소드, 객체명.getMessage()로 사용
가장 간단한 에러 메세지, 발생한 예외 내용만 출력toString() Throwable 클래스 일반 메소드, 객체명.toString()으로 사용
권장되는 방법, 발생한 예외 종류 출력
toString()을 생략하고 객체명으로만 출력해도 동일한 결과가 나옴printStackTrace() Throwable 클래스 일반 메소드, 객체명.printStackTrace()로 사용
발생한 예외의 종류와 문제가 있는 코드의 라인 출력
출력 코드 없이 단독으로 사용
예제
package j200205; public class ExceptionTotal { // 매개변수를 Run Configurations에서 설정 public static void main(String[] args) { try { // 에러 발생 가능성이 있는 코드 작성 int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); System.out.println("a: " + a + ", b:" + b); System.out.println("a를 b로 나눈 몫: " + (a / b)); // 수식 예외 처리 } catch (ArithmeticException e) { System.out.println(e.getMessage()); // a = 9, b = 0 // / by zero // 배열 첨자 예외 처리 } catch (IndexOutOfBoundsException e) { System.out.println(e); // a = 9 // java.lang.ArrayIndexOutOfBoundsException: 1 // 숫자 변환 실패 예외 처리 } catch (NumberFormatException e) { System.out.println(e.toString()); // a = 9, b = c // java.lang.NumberFormatException: For input string: "c" // 모든 종류의 예외 처리 가능 } catch (Exception e) { e.printStackTrace(); // a = 9, b = c /* 바로 위의 catch문이 없는 경우 java.lang.NumberFormatException: For input string: "c" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at j200205.ExceptionTotal.main(ExceptionTotal.java:9) */ // 예외 발생과 상관 없이 반드시 실행 } finally { System.out.println("예외 발생과 상관 없이 반드시 실행"); } } }
예외가 발생했을 때 이를 처리할 수 있는 구문인 try~catch~finally문에 대해 알아보았습니다.
catch 구문에서는 예외 자체를 해결한다기보다 예외의 정보를 얻어내고,
예외는 실제로 예외가 발생한 곳에서 해결된다고 보면 조금 더 이해하기가 쉬운 것 같습니다.
'JAVA > JAVA' 카테고리의 다른 글
Java | I/O(Input / Output) 입출력 개요 (0) 2020.02.06 Java | 예외 처리 throws & throw (0) 2020.02.05 Java | Exception 예외 (0) 2020.02.05 Java | Object Type Casting 객체 형 변환 & Instanceof (0) 2020.02.05 Java | Inner Class 내부 클래스 & Anonymous class 익명 클래스 (0) 2020.02.04