Почему этот код делает это так?
Потому что, очевидно, код не знает, как обрабатывать исключения на этом уровне. Это прекрасно - до тех пор, пока один из вызывающих абонентов делает это, т. Е. До тех пор, пока исключение не будет в конечном итоге обработано.
Часто низкоуровневый код не может должным образом реагировать на исключения, потому что пользователь должен быть уведомлен, или исключение должно быть зарегистрировано, или другая стратегия должна быть опробована. Низкоуровневый код выполняет только одну функцию и не знает о принятии решений более высокого уровня.
Но коду все еще нужно очистить свои ресурсы (потому что если этого не произойдет, они бы просочились), поэтому он делает именно это в предложении finally
, следя за тем, чтобы всегда происходило независимо от того, было ли создано исключение или нет.