프로그램 실행 중 발생하는 오류 중에서 처리가 가능 한 것을 의미
프로그래머가 고의로 예외를 발생 시킬 때 사용하는 방법
<구조>
Exception e = new Exception("Exeption"); throw e;
예시 )
public static void main(String[] args) { try { Exception e = new Exception("고의 예외"); throw e; //고의로 예외를 던지겠다. } catch (Exception e) { System.out.println("예외 발생"); System.out.println(e.getMessage()); } }
- Exception 객체 생성 후, 고의로 예외를 발생시켰다.
- 예외가 발생되었으니, catch문 무조건 실행된다.
예외가 발생
했을 경우, 현재 메서드
가 예외를 처리하지 않고
,
자신을 호출한 쪽
으로 예외 처리에 대한 책임을 넘기는 것
<구조>
void method() throws Exception{...}
예시 1 )
public static void main(String[] args) { try { methodA(); } catch (Exception e) { System.out.println("메인에서 처리"); } } public static void methodA() throws Exception{ methodB(); } public static void methodB() throws Exception{ methodC(); } public static void methodC() throws Exception{ Exception e = new Exception(); throw e; //예외 발생 }
main
의try문
에서methodA 호출
methodA
에서methodB 호출
methodB
에서methodC 호출
methodC
에서Exception 객체 생성
후
throw
로예외 강제 발생
시킴.
methodC
에서예외가 발생
되었지만, methodC를 호출한
methodB
로예외 처리 넘김
methodB
에서는자신을 호출
한methodA
로예외 처리 넘김
methodA
에서는자신을 호출
한main문
으로예외 처리 넘김
main문
의catch문
에서예외 처리
예시 2 )
public static void main(String[] args) { int age = -19; try { ticketing(age); } catch (AgeException e) { e.printStackTrace(); } } public static void ticketing(int age) throws AgeException { if(age < 0) { throw new AgeException("나이 입력이 잘못되었습니다."); } }
public class AgeException extends Exception{ public AgeException () {} public AgeException(String message) { super(message); } }
- try문에서 ticketing(age) 메서드 호출
- ticketing 메서드에서 if문 조건에 의해 AgeException 발생하여 객체 생성
- AgeException 생성자에 String으로 문자열 전달됨
- AgeException이 상속받은 부모 클래스인 Exception에
문자열 message로 전달하며 객체 생성됨.
- ticketing 메서드에서 throws를 통해 자신을 호출한 main문으로
예외 처리 넘김
- main문의 catch문에서 e.printStackTrace() 호출