В Java существуют два основных типа обрабатываемых исключений: checked и unchecked (runtime).
throws. Вызывающий код обязан либо поймать (catch) это исключение, либо также объявить, что он его выбрасывает (throws). Пример: IOException, FileNotFoundException.NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException.Различие между ними определяет обязанность разработчика по их явной обработке. Checked exceptions требуют от разработчика четко указать, как он будет справляться с потенциальной проблемой, в то время как unchecked exceptions предоставляют выбор, обрабатывать их или нет.