Проброс исключения (throws)

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

Тренажер по Java

Ключевое слово throws в сигнатуре метода указывает, какие проверяемые (checked) исключения метод может выбросить. Это обязывает вызывающий код либо обработать их в try-catch, либо тоже объявить throws. Непроверяемые исключения (RuntimeException и наследники) объявлять не обязательно. Правильное использование throws помогает компилятору следить за обработкой ошибок.

Список тем

1. Добавь throws в сигнатуру

id: 40503_throws_01_replace

В этом задании вам нужно дополнить объявление метода, который может выбросить исключение типа IOException. В коде метод readFileData() вызывает метод Files.readAllBytes(), который объявлен с throws IOException. Однако в текущем объявлении метода readFileData() отсутствует ключевое слово throws. Ваша задача — добавить пропущенное ключевое слово и тип исключения в сигнатуру метода, чтобы код успешно компилировался. Обратите внимание, что тело метода менять не нужно.

Заполните пропуски
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class FileReader {
    public static byte[] readFileData(String filePath) input1S {
        return Files.readAllBytes(Paths.get(filePath));
    }

    public static void main(String[] args) {
        try {
            byte[] data = readFileData("example.txt");
            System.out.println("File read successfully");
        } catch (IOException e) {
            System.out.println("Error reading file: " + e.getMessage());
        }
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Исправь ошибку компиляции

id: 40503_throws_02_error

В данном фрагменте кода Java присутствует ошибка компиляции, связанная с обработкой проверяемых исключений. Метод вызывает другой метод, который объявлен с использованием ключевого слова throws для проброса исключения, но сам не обрабатывает это исключение и не объявляет его в своей сигнатуре. Найдите строку с ошибкой и исправьте её, чтобы код успешно компилировался.

Найдите ошибку и исправьте
import java.io.IOException;
 
public class FileProcessor {
    public static void readFile() throws IOException {
        // Код, который может выбросить IOException
    }
 
    public static void processFile() {
        readFile(); // Ошибка компиляции здесь
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Скомпилируется ли код?

id: 40503_throws_03_predict

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

Выберите правильный вариант ответа

Рассмотрите следующие фрагменты кода:

Фрагмент 1:

import java.io.*;
class Test1 {
    void readFile() throws IOException {
        FileReader file = new FileReader("test.txt");
    }
}

Фрагмент 2:

import java.io.*;
class Test2 {
    void readFile() {
        FileReader file = new FileReader("test.txt");
    }
}

Фрагмент 3:

import java.io.*;
class Test3 {
    void readFile() {
        try {
            FileReader file = new FileReader("test.txt");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Фрагмент 4:

import java.io.*;
class Test4 {
    void readFile() throws IOException {
        try {
            FileReader file = new FileReader("test.txt");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Сообщения
Проверить
Показать подсказку

4. Выбери нужные исключения в throws

id: 40503_throws_04_select

В данном задании представлен фрагмент кода метода, который может бросать несколько проверяемых исключений. В сигнатуре метода пропущены исключения в throws. Используя выпадающие списки, выберите подходящие проверяемые исключения для каждого пропуска, ориентируясь на комментарии в коде. Обратите внимание, что непроверяемые исключения (наследники RuntimeException) в throws указывать необязательно, поэтому они не должны быть выбраны.

Нужно правильно расставить в пропуски предложенные варианты
public void process() throws input1S, // для работы с файлом
                               input2S, // для работы с базой данных
                               input3S, // для разбора даты
                               input4S { // для загрузки класса
    // ...
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Собери сигнатуру метода

id: 40503_throws_05_build

Из предложенных строк соберите корректную сигнатуру метода на Java. Метод должен быть публичным, статическим, не возвращать значение (void), принимать один параметр типа String, и объявлять проброс двух исключений: FileNotFoundException и IOException. Две строки являются лишними и не должны входить в решение. Обратите внимание, что порядок исключений в throws должен быть именно таким: сначала FileNotFoundException, затем IOException.

Перетяните в правильном порядке строки из одного блока в другой
public static void
readFile
(String path)
throws FileNotFoundException, IOException
private void
throws Exception
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Какой минимальный throws нужен

id: 40503_throws_07_give

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

Что должно получиться?
public void processFile(String path) {
    if (path == null) {
        throw new NullPointerException("Path cannot be null");
    }
    if (!path.endsWith(".txt")) {
        throw new IllegalArgumentException("File must be a .txt file");
    }
    // ... some file processing logic that may throw IOException
    throw new java.io.IOException("File not found");
}
Сообщения
Проверить
Показать подсказку

7. Отметь все checked исключения

id: 40503_throws_08_click

Перед вами фрагмент кода на Java, содержащий несколько операторов `throw new`. Внимательно изучите каждый из них. Ваша задача — отметить только те исключения, которые являются checked-исключениями (требуют обработки через try-catch или объявления в throws). Не отмечайте unchecked-исключения (RuntimeException и его подклассы).

Кликните по всем фрагментам, которые подходят под условие задания.
public void processFile(String path) throws IOException {
    if (path == null) {
        {{throw new IllegalArgumentException("Path cannot be null");~|~t1}}
    }
    File file = new File(path);
    if (!file.exists()) {
        {{throw new FileNotFoundException("File not found: " + path);~|~t2}}
    }
    try {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        // чтение файла
    } catch (IOException e) {
        {{throw new IOException("Error reading file", e);~|~t3}}
    }
    if (file.length() == 0) {
        {{throw new RuntimeException("File is empty");~|~t4}}
    }
    try {
        parseContent(file);
    } catch (ParseException e) {
        {{throw new ParseException(e.getMessage(), e.getErrorOffset());~|~t5}}
    }
    if (isInvalidFormat(file)) {
        {{throw new IllegalArgumentException("Invalid file format");~|~t6}}
    }
    try {
        validateData(file);
    } catch (SQLException e) {
        {{throw new SQLException("Database error", e);~|~t7}}
    }
    if (isTooLarge(file)) {
        {{throw new IllegalStateException("File too large");~|~t8}}
    }
}
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру