Приведи примеры, где ты использовал проверяемые исключения (checked exceptions) в своём коде.
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Применял проверяемые исключения в случаях, когда вызывающий метод может корректно обработать потенциальные ошибки, либо когда неудача операции является ожидаемым сценарием, а не фатальной ошибкой.
Примеры:
-
Работа с файловой системой: Открытие, чтение или запись в файл. Ошибки ввода/вывода (IOException, FileNotFoundException) типичны, например, файл не существует или нет прав.
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class FileReaderExample { public String readFile(String filePath) throws IOException { StringBuilder content = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { content.append(line).append("\n"); } } return content.toString(); } }В этом случае
IOExceptionсигнализирует о проблемах при работе с файлом, и клиентский код может решить, что делать: сообщить пользователю, попробовать снова и т.д. -
Работа с сетью: Установление соединения, отправка или получение данных. Ошибки сети (ConnectException, SocketTimeoutException) являются проверяемыми исключениями.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class NetworkClient { public String sendRequest(String host, int port, String message) throws IOException { try (Socket socket = new Socket(host, port); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) { out.println(message); return in.readLine(); } } }Здесь
IOExceptionили более специфичные подклассы указывают на сетевую проблему, которую клиент может попытаться обработать, например, повторив попытку или уведомив пользователя об отсутствии соединения. -
Работа с базами данных (JDBC): Выполнение SQL-запросов.
SQLExceptionсообщает об ошибках базы данных, таких как некорректный запрос, потеря соединения и т.д.import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DatabaseConnector { private static final String DB_URL = "jdbc:h2:mem:testdb"; // Пример H2 в памяти private static final String USER = "sa"; private static final String PASS = ""; public void executeQuery(String sql) throws SQLException { try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { // Обработка результатов ResultSet while (rs.next()) { // ... } } } }SQLExceptionинформирует о проблемах при взаимодействии с базой данных, позволяя приложению корректно отреагировать, например, откатить транзакцию или показать сообщение об ошибке. -
Парсинг данных: Парсинг форматов, которые могут быть неправильными, например XML или JSON. Хотя многие современные библиотеки используют Unchecked Exceptions для ошибок парсинга формата, в старых или специфических случаях, а также при работе с нестандартными форматами, могут использоваться Checked Exceptions (например,
SAXExceptionилиJAXBExceptionмогут быть checked в зависимости от контекста и версии/реализации).Предположим гипотетический парсер, который выбрасывает checked exception:
// Пример гипотетического парсера с Checked Exception public class MyDataParser { public MyData parse(String dataString) throws InvalidDataFormatException { // Логика парсинга if (dataString == null || !dataString.startsWith("<data>")) { throw new InvalidDataFormatException("Некорректный формат данных"); } // ... успешный парсинг return new MyData(); } } class InvalidDataFormatException extends Exception { public InvalidDataFormatException(String message) { super(message); } } class MyData { // ... }В таких сценариях
InvalidDataFormatExceptionявляется проверяемым исключением, поскольку клиентскому коду важно явно обрабатывать случай, когда входные данные имеют неверный формат, и, возможно, запросить повторный ввод или уведомить отправителя.
Использование проверяемых исключений явно документирует в сигнатуре метода, что данная операция может завершиться ошибкой по причинам, которые вызывающий код может или должен обработать. Это повышает надежность и предсказуемость API.