예외 클래스(try~catch, throws)

CHM·2022년 4월 18일
0

Java 기본

목록 보기
16/17

에러와 예외

  • 프로그램 실행 중 어떤 원인에 의해 오동작하거나, 비정상적으로 종료되는 경우
  • 컴파일 에러
    • 자바 컴파일러가 오타, 문법, 자료형 체크 등에서 오휴가 있는 경우
  • 런타임 에러
    • 프로그램 실행 중 발생하는 에러
    • 잘못된 결과 출력 및 비정상적인 프로그램 종료 발생
    • 에러 : 메모리 부족 및 스택 오버플로(복구할 수 없는 심각한 오류)
    • 예외 : 적절한 코드로 비정상적인 종료 방지 가능

예외처리 구문 구조

  • try ~ catch 문
try {
   // 예외 발생 가능성 코드
   실행코드 1
   실행코드 2
   실행코드 3
   
} catch (예외 클래스1 e1) {
   // 예외 클래스1의 예외가 발생하는 경우 실행될 코드
   실행코드 4
} catch (예외 클래스2 e2) {
   // 예외 클래스2의 예외가 발생하는 경우 실행될 코드
   실행코드 5
   
} finally {
   // 예외 발생 여부와 상관없이 무조건 실행되는 코드
   실행코드 6
}
  • 실행 코드가 한줄이라도, 중괄호 생략 불가
  • 실행 코드 2에서 예외 클래스 1의 예외가 발생한 경우 실행 순서
    • 1, 2, 4, 5
  • 예외가 발생하지 않은 경우 실행 순서
    • 1, 2, 3, 6

예외처리 예시

  • 원래 3/0은 에러가 나는 것이므로 예외처리1이 실행된다.
  • 3/0을 3/1로 바꾸고(참으로 바꿈) 배열 오류가 나므로 예외처리2가 실행된다.
public class ExceptionEx {
   
   public static void main(String[] args) {
      System.out.println("프로그램 시작");
      try {
         // System.out.println(3/0);
         System.out.println(3/1);
         int[] arr = new int[2];
         System.out.println(arr[2]);
         
      } catch (ArithmeticException e) {
         System.out.println("예외발생");
      } catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("배열 에러");
      
      } finally {
         System.out.println("finally");
      }
      
      System.out.println("프로그램 끝");
   }
}
  • 예외처리를 일일이 다 해주는 것이 힘들 수 있으므로 catch문을 최상위 클래스인 Exception으로 바꾸어서 한 번만 사용하는 것도 가능하다.
public class ExceptionEx {
   
   public static void main(String[] args) {
      System.out.println("프로그램 시작");
      try {
         // System.out.println(3/0);
         System.out.println(3/1);
         int[] arr = new int[2];
         System.out.println(arr[2]);
         
      } catch (Exception e) {
         System.out.println("예외발생");
      
      } finally {
         System.out.println("finally");
      }
      
      System.out.println("프로그램 끝");
   }
}

예외처리 미루기

// 메서드 A
void 메서드A() throws 예외클래스명... {
   ...
}

// 메서드 B
void 메서드B () {
   try {
      메서드A();  // 메서드 A 호출
   } catch (예외 클래스명 e) {
      예외 처리;
   }
}
  • 메서드 A가 실행되는 메서드 B에서 예외처리를 실행하게 된다.
  • 메서드 B가 예외처리를 하지 않으면 오류 발생

강제로 예외 발생시키는 방법

throw new 예외 클래스명("문자열");

0개의 댓글

관련 채용 정보