Блок finally

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

Блок finally — часть конструкции обработки исключений, которая выполняется всегда, независимо от того, произошло исключение или нет. Это гарантированное место для освобождения ресурсов.

  • Структура: try { } catch { } finally { }
  • Выполняется даже при наличии return в try или catch
  • Используется для закрытия файлов, соединений, потоков

Практические задания покажут, как ведёт себя finally в разных ситуациях: при успешном выполнении, при исключении, при наличии return. Онлайн-тренажёр с визуализацией порядка выполнения блоков поможет избежать типичных ошибок при работе с исключениями в Java.

Список тем

1. Заполнить ключевые слова

id: 40500_finally_01

В этом задании вам нужно заполнить пропущенные ключевые слова в конструкции 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());
                }
            }
        }
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Синтаксическая ошибка в finally

id: 40500_finally_02

В этом фрагменте 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 сек.
Показать подсказку

3. Собрать try-catch-finally

id: 40500_finally_03

Из предложенных строк соберите корректную конструкцию 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) {
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Что выведет код с finally

id: 40500_finally_04

Проанализируйте представленный код на 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. Порядок выполнения блоков

id: 40500_finally_05

Перед вами описания этапов выполнения конструкции try-catch-finally в Java при возникновении исключения. Строки перемешаны. Расставьте их в правильном порядке, который отражает реальную последовательность выполнения блоков try, catch и finally во время обработки исключения. Помните, что при возникновении исключения внутри блока try выполнение этого блока прерывается, ищется подходящий обработчик в catch, выполняется код catch, а затем всегда выполняется блок finally, независимо от того, было ли обработано исключение.

Расставьте строки в правильном порядке
Выполнение кода в блоке finally.
Переход к блоку catch (поиск подходящего обработчика).
В блоке try возникает исключение.
Выполнение кода в блоке catch.
Начало выполнения блока try.
Переход к блоку finally.
Сообщения
Проверить
Показать подсказку

6. Написать результат выполнения

id: 40500_finally_06

Проанализируйте приведённый фрагмент кода на 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

id: 40500_finally_07

В этом задании представлен фрагмент кода 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
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру