Я думаю, что код воли ближе всего подходит для выражения ключевой точки, и, вероятно, все это имеют в виду, но не совсем ясно.
Проблема в том, что действительно что-то не так с тем, что вы спрашиваете: «Если язапишите все операторы после блока catch вместо записи их в блок finally, тогда будет ли что-то не так? "
Если вы пишете все операторы после блока catch, вы подразумеваете, что
1) Вы всегда будете ловить исключение.
2) Вы всегда будете переходить к следующим операторам после того, как поймаете исключение.
Это означает, что вы всегда будете продолжать выполнение «нормально» после исключения, которое обычно является чем-то, что вы никогда на самом деле хотят делать.
Исключения должны быть именно такими - исключительными.Если вы действительно можете обработать исключение, всегда лучше написать свой код, чтобы сначала рассмотреть эти условия, а не привести к исключению вообще.Если вы следуете этой модели, то исключения являются действительно исключительными - условия, которые вы не могли предвидеть или, самое большее, не исправить.На самом деле не стоит ожидать того, к чему вы должны стремиться. В целом это означает, что вы не можете обрабатывать истинные исключения, что также означает, что вы не должны просто продолжать выполнение, часто вместо этого вы заканчиваете приложение.
Что обычносделано, вы позволяете ошибке распространяться обратно вверх по стеку вызовов.Некоторые говорят, что это сделано на случай, если кто-то, кто выше по цепочке, сможет справиться с этим.Я бы сказал, что по сути никогда не бывает, есть две реальные цели сделать это.Один из них может быть чем-то, что пользователь может исправить, если он есть.Таким образом, вы распространяете ошибку обратно до тех пор, пока не доберетесь до места, где сможете сообщить об этом пользователю.Или, во-вторых, пользователь не может это исправить, но вы хотите получить весь стек вызовов для отладки.Затем вы ловите его сверху, чтобы изящно провалиться.
Блок finally теперь должен иметь для вас больше значения.Как все говорят, это всегда работает.Самое ясное использование finally - это действительно попытка ... наконец, блок.Теперь вы говорите, что если код работает нормально, отлично.Нам все еще нужно выполнить некоторую очистку, и, наконец, всегда выполняется, затем мы идем дальше.Но если возникает исключение, теперь нам действительно нужен этот блок finally, потому что нам, возможно, все еще нужно будет выполнить некоторую очистку, но мы больше не ловим исключение здесь, поэтому мы больше не будем двигаться дальше.Блок finally важен для обеспечения очистки.
Идею исключения, всегда останавливающего выполнение, может быть трудно кому-то понять, пока у него не будет определенного опыта, но на самом деле это способвсегда делай вещиЕсли произошла ошибка, либо она была настолько незначительной, что вам следовало бы ее учесть с самого начала, либо появилось все больше и больше ошибок, ожидающих появления в будущем.
«Глотание» ошибок - их перехват идвигаться дальше - это худшее, что вы можете сделать, потому что ваша программа становится непредсказуемой, и вы не можете находить и исправлять ошибки.
Хорошо написанный код будет содержать столько блоков try ... finally, сколько необходимо, чтобы убедиться, что ресурсывсегда освобожден независимо от результата.Но хорошо написанный код, как правило, содержит лишь небольшое количество блоков try ... catch, которые существуют, прежде всего, для того, чтобы приложение могло как можно более грациозно завершиться с ошибкой или отложить на пользователя, что означает, по крайней мере, всегда передачу сообщения пользователю и т. Д.Но вы обычно не просто ловите ошибку и продолжаете идти.