Checked exceptions muszą być obsłużone lub zadeklarowane w sygnaturze (dziedziczą po `Exception`, ale nie po `RuntimeException`). Unchecked (`RuntimeException`) nie wymagają tego i zwykle oznaczają błąd programistyczny lub niepoprawny stan.