На практике обработка исключений — это больше, чем просто знание синтаксиса. Написание надежного кода — это скорее искусство, и в этой статье будут обсуждаться лучшие практики обработки исключений Java. Эти лучшие практики Java соответствуют стандартным библиотекам JDK и нескольким открытым исходным кодам для обработки ошибок и исключений. Это также удобное руководство для Java-программистов по написанию надежного кода. Лучшие практики обработки исключений в программировании на Java
Вот моя коллекция из 10 лучших практик обработки исключений в программировании на Java. Проверяемые исключения в программировании на Java вызывают похвалы и критику. Принудительная обработка исключений является функцией языка. В этой статье мы постараемся свести к минимуму использование проверяемых исключений и научимся использовать проверенные и непроверяемые исключения в программировании на Java.
1) Используйте проверенные исключения для исправимых ошибок и непроверяемые ошибки для ошибок программирования.
Выбор проверенных или непроверенных исключений всегда сбивает с толку программистов Java. Проверенные исключения гарантируют, что вы предоставите код обработки исключений для ошибок. Это способ заставить вас писать надежный код, но он также вносит много беспорядка и делает его нечитаемым. Конечно, перехват исключений и что-то с ними кажется разумным, если у вас есть стратегия замены и восстановления. Выбирайте между проверенными исключениями и исключениями времени выполнения в программировании на Java. Дополнительные сведения см. в разделе проверенные и непроверенные исключения.
2) Закройте или освободите ресурсы в блоке Final.
Это хорошо известная передовая практика программирования на Java, эквивалентная стандарту при работе с сетями и классами ввода-вывода. Закрытие ресурсов в блокеfinally обеспечивает разумное высвобождение ранее доступных и дефицитных ресурсов при нормальных и ненормальных условиях выполнения, что гарантирует блокfinally. Начиная с Java 7, в языке появилась более интересная особенность: эту возможность могут реализовать автоматизация управления ресурсами или блоки ARM. Тем не менее, нам все равно нужно не забывать закрывать ресурсы в блоке Final, что важно для освобождения ограниченных ресурсов, таких как FileDescriptors, которые используются в ситуациях программирования сокетов и файлов.
3) Включите причину исключения в трассировку стека.
Часто библиотеки Java и код с открытым исходным кодом оборачивают одно исключение в другое, когда возникает исключение, вызванное другим исключением. Регистрация и печать корневых исключений становится очень важной. Класс исключений Java предоставляет метод getCause() для получения причины исключения, который может предоставить дополнительную информацию о причине исключения на корневом уровне. Эта практика Java очень полезна при отладке или устранении неполадок. Всегда помните, что если вы переносите исключение в другое исключение, вы должны передать исходное исключение при создании нового исключения.
4) Всегда предоставляйте содержательную и полную информацию об исключении.
Информация об исключениях — самое важное место, поскольку это первое место, которое видит программист, и именно здесь можно найти основную причину проблемы. Здесь всегда предоставляется точная и достоверная информация. Например, сравните два сообщения об исключении IllegalArgumentException:
Сообщение 1: «Неверный аргумент метода»
Сообщение 2: «Недопустимое значение для ${argument}: ${value}».
В первом сообщении указывается только, что параметр недопустим или неверен, а второе сообщение содержит имя параметра и недопустимое значение, что важно для поиска причины ошибки. Всегда следуйте этим рекомендациям по Java при написании кода обработки исключений в программировании на Java.
5) Избегайте чрезмерного использования проверенных исключений.
Проверенные исключения имеют определенные преимущества в обеспечении выполнения, но они также нарушают код и делают его менее читаемым, маскируя бизнес-логику. Если вы не злоупотребляете проверенными исключениями, вы можете свести к минимуму такие ситуации, и в результате получится более чистый код. Вы также можете использовать новые функции Java 7, такие как один блок catch для нескольких исключений и автоматическое управление ресурсами для удаления дубликатов.
6) Преобразование проверенных исключений в исключения времени выполнения.
Это один из методов, используемых для ограничения использования проверяемых исключений в большинстве платформ, таких как Spring. Большинство проверяемых исключений из JDBC заключены в DataAccessException, а исключение (DataAccessException) является непроверяемым исключением ненормального типа. Это преимущество, которое дают лучшие практики Java. Конкретные исключения ограничиваются конкретными модулями, например SQLException, который размещается на уровне DAO, а исключения времени выполнения с ясным смыслом передаются на клиентский уровень.
7) Помните, что исключения дорого сказываются на производительности.
Следует помнить одну вещь: исключения являются дорогостоящими и замедляют работу вашего кода. Если у вас есть метод, который читает из ResultSet, он часто выдает исключение SQLException без перехода к следующему элементу, который будет выполняться намного медленнее, чем обычный код, который не генерирует исключение. Таким образом, перехват и перемещение ненужных исключений сводятся к минимуму там, где нет фиксированной причины. Вместо того, чтобы просто генерировать и перехватывать исключения, вы можете получить более чистое и производительное решение, если сможете использовать логические переменные для представления результатов выполнения. Исправьте источник ошибки и избегайте ненужного перехвата исключений.
8) Не допускайте, чтобы блок catch был пустым
Нет ничего хуже, чем пустой блок catch, поскольку он не только скрывает ошибки и исключения, но и может оставить ваши объекты в непригодном для использования или грязном состоянии. Пустой блок catch может стать бессмысленным только в том случае, если вы абсолютно уверены, что исключение не будет и дальше каким-либо образом влиять на состояние объекта, но протоколирование ошибок во время выполнения программы все же является лучшим вариантом. Это не просто лучшая практика Java, а наиболее распространенная практика написания кода обработки исключений в программировании на Java.
9) Используйте стандартные исключения
Наша девятая лучшая практика рекомендует использовать стандартные и встроенные исключения Java. Использование стандартных исключений вместо того, чтобы каждый раз создавать свои собственные, — лучший выбор для удобства сопровождения и согласованности сейчас и в будущем. Повторное использование стандартных исключений делает код более читабельным, поскольку большинство разработчиков Java знакомы со стандартными исключениями, такими как RuntimeException, IllegalStateException, IllegalArgumentException или NullPointerException, которые происходят из JDK, и они могут сразу узнать каждое исключение. Цель состоит не в том, чтобы искать пользовательские исключения. определенные исключения в коде или в документации.
10) Записывать исключения, возникающие любым методом.
Java предоставляет ключевые слова throw и throws для создания исключений. Используйте @throw в javadoc для записи любых исключений, которые могут быть созданы любым методом. Это становится очень важным, если вы пишете API или общедоступные интерфейсы. Любое исключение, создаваемое методом, должно быть задокументировано, чтобы вы могли подсознательно предупредить любого, кто его использует. Это все лучшие практики, которым необходимо следовать при обработке исключений в программировании на Java. Дайте нам знать, какие практики необходимо соблюдать при написании кода обработки исключений в программировании на Java.