Блок finally — часть конструкции обработки исключений, которая выполняется всегда, независимо от того, произошло исключение или нет. Это гарантированное место для освобождения ресурсов.
- Структура:
try { } catch { } finally { } - Выполняется даже при наличии
returnв try или catch - Используется для закрытия файлов, соединений, потоков
Практические задания покажут, как ведёт себя finally в разных ситуациях: при успешном выполнении, при исключении, при наличии return. Онлайн-тренажёр с визуализацией порядка выполнения блоков поможет избежать типичных ошибок при работе с исключениями в Java.
- Модуль 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-finally. Код демонстрирует простой сценарий работы с ресурсом: открытие файла, чтение данных и обязательное закрытие ресурса в блоке, который выполняется всегда. Вставьте правильные ключевые слова (try, catch, finally) в указанные места, чтобы обеспечить корректную обработку исключений и гарантированное освобождение ресурсов.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReadExample {
public static void main(String[] args) {
BufferedReader reader = null;
input1S {
reader = new BufferedReader(new FileReader("example.txt"));
String line = reader.readLine();
System.out.println(line);
} input2S (IOException e) {
System.err.println("Ошибка чтения файла: " + e.getMessage());
} input3S {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
System.err.println("Ошибка при закрытии файла: " + e.getMessage());
}
}
}
}
}2. Синтаксическая ошибка в finally
В этом фрагменте Java-кода, посвящённом обработке исключений, допущена одна синтаксическая ошибка в блоке finally. Найдите и исправьте эту ошибку, чтобы код мог быть успешно скомпилирован и выполнен, обеспечивая корректную работу блоков try-catch-finally. Обратите внимание на правильное написание ключевых слов и структуру кода.
public class Main { public static void main(String[] args) { try { int result = 10 / 0; } catch (ArithmeticException e) { System.out.println("Ошибка: деление на ноль"); } finnaly { System.out.println("Блок finally выполнен"); } }}3. Собрать try-catch-finally
Из предложенных строк соберите корректную конструкцию try-catch-finally на Java, которая выполняет операцию деления, обрабатывает возможное исключение ArithmeticException и в блоке finally выводит сообщение о завершении операции. Одна из строк является лишней и не должна входить в итоговое решение. Учтите, что порядок блоков try, catch и finally строго фиксирован.
try { int result = 10 / 0;} catch (ArithmeticException e) { System.out.println("Деление на ноль!");} finally { System.out.println("Операция завершена.");}} catch (NullPointerException e) {4. Что выведет код с finally
Проанализируйте представленный код на Java, содержащий блоки try, catch и finally. В блоке try генерируется исключение, а в блоках catch и finally выполняются выводы на консоль. Определите, какая последовательность строк будет выведена при выполнении программы. Выберите правильный вариант из предложенных.
public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Начало try");
throw new RuntimeException("Исключение в try");
} catch (RuntimeException e) {
System.out.println("В catch: " + e.getMessage());
} finally {
System.out.println("Блок finally");
}
}
}5. Порядок выполнения блоков
Перед вами описания этапов выполнения конструкции try-catch-finally в Java при возникновении исключения. Строки перемешаны. Расставьте их в правильном порядке, который отражает реальную последовательность выполнения блоков try, catch и finally во время обработки исключения. Помните, что при возникновении исключения внутри блока try выполнение этого блока прерывается, ищется подходящий обработчик в catch, выполняется код catch, а затем всегда выполняется блок finally, независимо от того, было ли обработано исключение.
6. Написать результат выполнения
Проанализируйте приведённый фрагмент кода на Java, обращая особое внимание на порядок выполнения операций в блоках try и finally. В блоке try переменной присваивается начальное значение, затем в блоке finally это значение изменяется. После выполнения всей конструкции значение переменной выводится на экран. Определите, какое именно число будет выведено в результате выполнения программы. Введите одно целое число без дополнительных символов.
public class Main {
public static void main(String[] args) {
int value = 0;
try {
value = 10;
} finally {
value = 20;
}
System.out.println(value);
}
}7. Выбрать правильные действия в finally
В этом задании представлен фрагмент кода Java, который читает файл с использованием FileInputStream. В блоке finally есть три пропуска, обозначенных как input1, input2 и input3. Ваша задача — выбрать из выпадающего списка подходящие операции для заполнения этих пропусков, чтобы код корректно освобождал ресурсы и логировал выполнение. Правильными операциями являются закрытие ресурса с помощью close(), вывод сообщения в консоль с println() и присваивание null ссылке для помощи сборщику мусора. Избегайте выбор отвлекающих вариантов, таких как throw new Exception() или return, так как они не рекомендуются в блоке finally из-за возможного подавления исключений или нарушения потока выполнения.
try {
FileInputStream fis = new FileInputStream("file.txt");
int data = fis.read();
} catch (IOException e) {
System.err.println("Error reading file");
} finally {
input1S
input2S
input3S
}