Блок try-catch

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

Тренажер по Java

Блок try-catch — основной механизм обработки исключений в Java. Он позволяет перехватить ошибку и обработать её, не допуская аварийного завершения программы.

Структура:

  • try { } — код, который может вызвать исключение
  • catch (ТипИсключения e) { } — код обработки конкретного типа ошибки
  • finally { } — необязательный блок, выполняется всегда (для освобождения ресурсов)

Можно использовать несколько блоков catch для разных типов исключений. Порядок важен: сначала более специфичные исключения, потом общие. Тренажер ниже поможет освоить синтаксис и логику работы исключений на практике.

Список тем

1. Базовый синтаксис try-catch

id: 40498_try_01_replace_basic

Дополните фрагмент кода на 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("Ошибка: деление на ноль!");
        }
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Собери try-catch-finally

id: 40498_try_02_build_structure

Из предложенных строк соберите корректную 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 сек.
Показать подсказку

3. Неправильный порядок catch

id: 40498_try_03_error_order

В приведённом фрагменте кода на 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());
        }
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Типы исключений и ситуации

id: 40498_try_04_compare_exceptions

В левой колонке перечислены типы исключений в Java, а в правой — описания ситуаций, которые могут их вызвать. Сопоставьте каждый тип исключения с соответствующей ситуацией. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок описаний перемешан.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
NullPointerException
ArrayIndexOutOfBoundsException
ArithmeticException
NumberFormatException
FileNotFoundException
Деление на ноль
Неверный формат числа
Обращение к null
Файл не найден
Выход за границы массива
Сообщения
Проверить
Показать подсказку

5. Части конструкции

id: 40498_try_05_highlight

Разметьте части конструкции 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}}
}
Блок try
Блок finally
Переменная исключения
Тип исключения
Блок catch
Сообщения
Проверить
Показать подсказку

6. Выбери тип исключения

id: 40498_try_06_select_exception

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

7. Что выведет программа?

id: 40498_try_07_predict_output

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

id: 40498_try_08_click_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 блок

id: 40498_try_09_multicatch

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