Исключение — это сигнал о том, что в программе произошла нештатная ситуация, при которой нормальное выполнение кода невозможно или бессмысленно. Механизм throw позволяет прервать текущий поток выполнения и передать управление ближайшему обработчику ошибок в стеке вызовов. Без исключений приходилось бы возвращать специальные значения (например, -1 или null) и проверять их после каждого вызова, что загромождает код и легко приводит к пропущенным проверкам. Исключения разделяют "успешный" и "аварийный" пути выполнения.
Блок try содержит код, в котором потенциально может произойти исключение. Если исключение возникает, выполнение try прерывается, и управление передаётся в catch, где ошибку можно обработать. Блок finally выполняется всегда — и после успешного выполнения try, и после обработки в catch, и даже если в try или catch был выполнен return. Типичное пр