Блок try-catch — основной механизм обработки исключений в Java. Он позволяет перехватить ошибку и обработать её, не допуская аварийного завершения программы.
Структура:
try { }— код, который может вызвать исключениеcatch (ТипИсключения e) { }— код обработки конкретного типа ошибкиfinally { }— необязательный блок, выполняется всегда (для освобождения ресурсов)
Можно использовать несколько блоков catch для разных типов исключений. Порядок важен: сначала более специфичные исключения, потом общие. Тренажер ниже поможет освоить синтаксис и логику работы исключений на практике.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Базовый синтаксис try-catch
Дополните фрагмент кода на Java так, чтобы он корректно обрабатывал исключение ArithmeticException, возникающее при делении на ноль. Вставьте пропущенные ключевые слова и тип исключения, чтобы программа выводила сообщение об ошибке вместо аварийного завершения. Обратите внимание на структуру блока try-catch.
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 0;
int result;
input1S {
result = a / b;
System.out.println("Результат: " + result);
} input2S (input3S e) {
System.out.println("Ошибка: деление на ноль!");
}
}
}2. Собери try-catch-finally
Из предложенных строк соберите корректную java-программу, которая демонстрирует обработку исключения ArrayIndexOutOfBoundsException при попытке доступа к элементу массива по несуществующему индексу. Программа должна содержать блок try, в котором выполняется операция с массивом, блок catch для перехвата исключения с выводом сообщения об ошибке, и блок finally, в котором закрывается ресурс (в данном случае выводится сообщение о завершении работы). Одна из строк лишняя и в решение входить не должна.
public class Main { public static void main(String[] args) { int[] arr = {1, 2, 3}; try { int value = arr[5]; } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Ошибка: выход за границы массива"); } finally { System.out.println("Завершение работы"); } }} System.out.println("Программа завершена");3. Неправильный порядок catch
В приведённом фрагменте кода на Java допущена ошибка, связанная с порядком блоков catch при обработке исключений. Программа пытается прочитать данные из файла, но блоки catch расположены неправильно, что приведёт к ошибке компиляции. Найдите и исправьте строку с ошибкой, чтобы код мог корректно обрабатывать исключения.
import java.io.*; public class FileReadExample { public static void main(String[] args) { try { FileReader file = new FileReader("data.txt"); BufferedReader reader = new BufferedReader(file); String line = reader.readLine(); System.out.println(line); reader.close(); } catch (Exception e) { System.out.println("Произошла общая ошибка: " + e.getMessage()); } catch (IOException e) { System.out.println("Ошибка ввода-вывода: " + e.getMessage()); } }}4. Типы исключений и ситуации
В левой колонке перечислены типы исключений в Java, а в правой — описания ситуаций, которые могут их вызвать. Сопоставьте каждый тип исключения с соответствующей ситуацией. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок описаний перемешан.
5. Части конструкции
Разметьте части конструкции try-catch-finally в приведённом коде Java. Для каждого выделенного фрагмента укажите, является ли он блоком try, блоком catch, блоком finally, типом исключения или переменной исключения. Это упражнение поможет закрепить понимание структуры обработки исключений.
try {
{{int result = 10 / 0;~|~t1}}
} {{catch (ArithmeticException e) {~|~t2}}
{{System.out.println("Деление на ноль");~|~t3}}
} {{finally {~|~t4}}
{{System.out.println("Блок finally выполнен");~|~t5}}
}6. Выбери тип исключения
В данном фрагменте кода Java используется конструкция try-catch для обработки исключений. В catch-блоках пропущены типы исключений. Вам необходимо выбрать из предложенного списка подходящие типы исключений для каждого пропуска, чтобы код корректно обрабатывал возможные ошибки. Обратите внимание на контекст операций внутри try-блока: преобразование строки в число, чтение файла и работа с массивом.
public class ExceptionExample {
public static void main(String[] args) {
try {
String str = "abc";
int num = Integer.parseInt(str); // Может вызвать исключение
java.io.FileReader file = new java.io.FileReader("test.txt"); // Может вызвать исключение
file.read();
int[] arr = new int[5];
arr[10] = 42; // Может вызвать исключение
} catch (input1S) {
System.out.println("Ошибка преобразования строки в число");
} catch (input2S) {
System.out.println("Ошибка ввода-вывода при работе с файлом");
} catch (input3S) {
System.out.println("Выход за границы массива");
}
}
}7. Что выведет программа?
Проанализируйте приведённый код на Java, содержащий блок try-catch-finally. В блоке try генерируется исключение. Определите, какая последовательность сообщений будет выведена на экран при выполнении программы. Выберите правильный вариант из предложенных.
public class ExceptionDemo {
public static void main(String[] args) {
try {
System.out.println("Начало try-блока");
throw new RuntimeException("Исключение создано");
} catch (RuntimeException e) {
System.out.println("Блок catch: " + e.getMessage());
} finally {
System.out.println("Блок finally выполнен");
}
System.out.println("Программа завершена");
}
}8. Найди блоки catch
Внимательно изучите приведённый фрагмент кода на Java. Ваша задача — найти и выделить все блоки catch, которые используются для обработки исключений. Не отмечайте блоки try, finally, операторы if или другие конструкции. Кликайте только на строки, содержащие объявление catch-блока (включая ключевое слово catch, тип исключения в скобках и открывающую фигурную скобку).
public void processFile(String path) {
{{try~|~t1}} {
FileReader reader = new FileReader(path);
BufferedReader br = new BufferedReader(reader);
String line = br.readLine();
while (line != null) {
System.out.println(line);
line = br.readLine();
}
} {{catch (FileNotFoundException e) {~|~t2}}
System.err.println("Файл не найден: " + e.getMessage());
} {{catch (IOException e) {~|~t3}}
System.err.println("Ошибка ввода-вывода: " + e.getMessage());
} {{finally {~|~t4}}
System.out.println("Завершение обработки файла.");
}
}
public void validateInput(int value) {
{{if (value < 0) {~|~t5}}
throw new IllegalArgumentException("Значение не может быть отрицательным");
}
System.out.println("Проверка пройдена: " + value);
}
public void divideNumbers(int a, int b) {
{{try~|~t6}} {
int result = a / b;
System.out.println("Результат: " + result);
} {{catch (ArithmeticException e) {~|~t7}}
System.err.println("Деление на ноль: " + e.getMessage());
}
}
public void connectToDatabase(String url) {
{{try~|~t8}} {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url);
System.out.println("Подключение установлено.");
} {{catch (ClassNotFoundException e) {~|~t9}}
System.err.println("Драйвер базы данных не найден.");
} {{catch (SQLException e) {~|~t10}}
System.err.println("Ошибка SQL: " + e.getMessage());
}
}9. Мульти-catch блок
В этом задании вам предстоит заполнить пропуски в коде, демонстрирующем использование multi-catch блока в Java. Multi-catch блок позволяет перехватывать несколько типов исключений в одном блоке catch, что упрощает обработку схожих ошибок. Заполните пропуски оператором для объединения типов исключений и именем переменной, которая будет хранить перехваченное исключение. После заполнения код должен корректно компилироваться и выводить сообщение об ошибке при возникновении исключения.
import java.io.IOException;
import java.sql.SQLException;
public class MulticatchExample {
public static void main(String[] args) {
try {
// Может выбросить IOException или SQLException
throw new IOException("Ошибка чтения файла");
} catch (IOException input1S SQLException input2S) {
System.out.println("Произошло исключение: " + input2S.getMessage());
}
}
}