예외(Exception)는 애플리케이션이 잡을 수 있는 Throwable의 파생 클래스다. 예외에 관한 상속 계층도는 다음과 같다.

오류
오류(
Error)는 비정상적인 상황에서 나타나는 심각한 문제로서 잡으려고 시도해서는 안 되는Throwable의 파생 클래스다. 따라서 메서드의throws절에 선언할 필요가 없고 비체크 예외로 간주된다.
예외는 예외 처리의 필수 여부에 따라 체크 예외와 비체크 예외으로 나뉜다.
체크 예외
체크 예외(checked exception)은 반드시 잡아서 처리해야 하는 컴파일 시간 예외다. Exception 클래스와 그 파생 클래스 중 RuntimeException을 상속하지 않은 클래스가 해당된다.
체크 예외를 처리하지 않으면 IDE 혹은 컴파일러는 예외를 처리하도록 강제한다. 다음 스크린샷에서 IntelliJ IDEA는 FileInputStream이 발생시킬 수 있는 FileNotFoundException을 처리하도록 강제한다.

비체크 예외
비체크 예외(unchecked exception)은 예외 처리를 강제하지 않는 실행 시간 예외다. RuntimeException과 그 파생 클래스가 해당된다.
비체크 예외를 처리하지 않으면 IDE에서 경고를 출력할 수도 있지만 컴파일에 성공한다. 다음 스크린샷에서 IntelliJ IDEA는 ‘0으로 나누기’라는 경고 메시지를 출력한다. 경고를 무시하더라도 해당 자바 파일은 정상적인 바이트코드로 컴파일할 수 있다. 이를 실행하면 비체크 예외인 ArithmeticException이 발생하고 프로그램 실행이 중단된다.
