예외를 던질 때는 다음과 같은 일이 벌어진다.
• 프로그램은 예외를 잡아내는 핸들러(exception handler)를 찾는다. 예외와 일치하는 예외 핸들러가 있다면 예외 핸들러가 예외를 처리한다.
• 현재 함수 내부에서 핸들러를 찾을 수 없으면 함수 실행이 종료되고 함수가 스택에서 제거(pop)된다. 그리고 호출한 쪽의 문맥 안에서 예외 핸들러 검색을 수행한다. 이런 경우 예외를 호출자에게 전파(propagate)했다고 말한다.
• 프로그램 진입점에 이를 때까지 예외를 잡아내지 못하면 현재 스레드가 종료된다.
즉, 코틀린 예외 처리 단계는 기본적으로 자바와 같다.
자바 vs. 코틀린 코틀린에서는 앞에서 봤던 break나 continue와 같이 throws 식도 Nothing 타입의 식이다. 예를 들면 다음과 같다.
fun sayHello(name: String) { val message = if (name.isNotEmpty()) "Hello, $name" else throw IllegalArgumentException("Empty name") println(message) }