2010-12-16 3 views

ответ

10

«Эффективность» не должно вызывать беспокойства.

Вы бросаете исключение, когда сталкиваетесь с ситуацией, с которой не может работать ваш код (что вы хотите, чтобы вызывающий пользователь что-то сделал).

Вы получаете исключение, если вы можете что-то сделать (и вы все равно можете повторно бросить его или другое исключение, если ваш вызывающий должен также что-то сделать с ним).

Эффективность может представлять интерес, если вы решаете, следует ли проверять условие ошибки, чтобы избежать последующего исключения или просто вызвать некоторый код и обработать исключение впоследствии. Здесь эмпирическое правило заключается в том, что исключения должны возникать только в исключительных случаях, потому что они несут на себе слишком много служебных затрат времени выполнения (когда они фактически выбрасываются, чистое присутствие блоков catch не требует затрат).

+0

Действительно ли это правда, что нет необходимости иметь блок catch? Я бы подумал, что накладные расходы (хотя и, вероятно, небольшие по сравнению с вашим реальным кодом) в настройке и разрывании дополнительных кадров, ориентированных на исключение, даже если исключения не выбрасываются. – 2010-12-16 04:50:14

4

Ну, это одна из дискуссионных тем, в которых много людей имеют сильные мнения. Несколько полезных ссылок

http://www.ibm.com/developerworks/java/library/j-jtp05254.html

http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html

Большинство популярных рамок как Spring верят в философии только обработка исключений, если вы можете сделать что-то о них, и поэтому они бросают более прогонов исключения времени. Это имеет смысл, поскольку бросать и ловить проверенные исключения - это добавление ненужного кода.

Еще есть улов. В какой-то момент вашего приложения, особенно ближе к интерфейсу интерфейса UI (например, сервлеты для вашего веб-приложения), вы хотите убедиться, что вы правильно обрабатываете все виды исключений и ловите их. В противном случае пользователь увидит ошибку 500, которая определенно не идеальна. В какой-то момент вы хотите дать пользователю представление о том, что пошло не так. если это исключение во время выполнения, может быть лучше сказать, неподтвержденная ошибка, зарегистрировать ее и отправить почту системному администратору со следом.

Итак, да, обрабатывайте только исключения, которые вы ожидаете и можете обрабатывать конструктивно во всем приложении. Но сделайте исключение из этого правила, когда вы приближаетесь к уровню пользовательского интерфейса вашего приложения.

Смежные вопросы