Throwable 클래스
모든 예외 클래스의 최상위 클래스이다. 물론 Object를 상속한다.
getMessage(): 예외의 원인을 담고 있는 문자열 반환
printStackTrace(): 예외가 발생한 위치와 호출된 메소드의 정보를 출력
참고!
각각를 출력할 필요는 없다. printStackTrace()는 원인도 알려준다.
예외 (책임)전달
예외가 발생하면 JVM은 실행을 멈추고 예외 처리 메커니즘 루틴이 실행된다. 그 과정에서 제일 먼저 예외가 왜 발생했는지 파악하고 그와 관련된 클래스의 인스턴스를 생성하는 것이 기본적인 단계이다. 예외 처리 메커니즘의 첫 번째 단계라고 할 수 있겠다.
두 번째, 예외가 발생하면 try를 찾는다. 예외 발생 지점에서 예외를 처리하지 않으면(try문을 찾지 못하면) 해당 메소드를 호출한 영역으로 예외가 전달된다. try문을 찾을 때까지 반복한다. 앞에서 try~catch가 없는데 예외가 발생하면 프로그램이 종료된다고 했다. 종료도 예외가 발생했다고 바로 종료되는 것이 아니라 try문을 찾는 과정을 거친 후 종료가 되는 것이다.
예외 발생 지점에서 예외를 처리하지 않으면(try문이 없으면) 해당 메소드를 호출한 영역으로 예외가 전달된다.
위의 예제에서도 try문을 찾다가 md1을 호출한 영역 main에 예외가 전달되고, main을 호출한 JVM에 예외의 책임을 전달한다. JVM까지 예외가 전달되면 프로그램을 종료시키는 것이다.
Throwable 클래스 상속하는 3가지 클래스
- Error 클래스
- Exception 클래스
- RuntimeException 클래스
Error 클래스를 상속하는 예외 클래스들의 특성
Error는 프로그램 내에서 처리할 수 있는 수준의 예외가 아니다. Exception 클래스랑 다르다.
RuntimeException 클래스를 상속하는 예외 클래스들의 특성
RuntimeException은 Error와 Exception의 중간의 특성을 가진다. 대대수가 코드를 뜯어 고쳐야 되는 에러에 가깝다. 그래서 굳이 try~catch 하지 않는다(프로그램 종료).
Exception 클래스를 상속하는 예외 클래스들의 특성
Exception만 상속하는 클래스는 진정한 예외 클래스라고 할 수 있다. 자바 컴파일러도 개발자가 처리하게 종용한다. Exception을 상속하는 예외는 try~catch문을 통해 직접 처리하거나 throws을 통해 넘겨야 한다.
- try~catch(직접 예외 처리)
- throws(예외 전달)
둘 중 하나라도 안하면 컴파일 에러 발생한다. 예외처리는 자바에서 필수다.
둘 이상의 예외 넘김에 대한 선언
'Programming > Java' 카테고리의 다른 글
JAVA 19(2) Object 클래스 (0) | 2021.08.05 |
---|---|
JAVA 19(1) 메모리 모델 (0) | 2021.08.05 |
JAVA 18(1) 예외처리의 기본 (0) | 2021.08.05 |
JAVA 17(3) 인터페이스의 static 메소드 (0) | 2021.08.04 |
JAVA 17(2) 인터페이스의 기본 접근 지정자 (0) | 2021.08.04 |