РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
716 of 1163 menu

Класс UncheckedIOException

Класс UncheckedIOException наследуется от RuntimeException и служит для обертывания проверяемого исключения IOException в непроверяемое. Это особенно удобно при работе с лямбда-выражениями и Stream API, где нельзя напрямую выбрасывать проверяемые исключения. В конструктор первым параметром передается сообщение об ошибке, вторым - исходный объект IOException, который нужно обернуть.

Синтаксис

new UncheckedIOException(String message, IOException cause) new UncheckedIOException(IOException cause)

Пример

Давайте обернем проверяемое исключение IOException в непроверяемое и выбросим его из метода, который не объявляет throws:

import java.io.IOException; import java.io.UncheckedIOException; public class Main { public static void main(String[] args) { try { readData(); } catch (UncheckedIOException e) { System.out.println("Caught: " + e.getMessage()); System.out.println("Cause: " + e.getCause().getMessage()); } } public static void readData() { try { throw new IOException("File not found"); } catch (IOException e) { throw new UncheckedIOException("Failed to read data", e); } } }

Результат выполнения кода:

"Caught: Failed to read data" "Cause: File not found"

Пример

Давайте используем UncheckedIOException внутри лямбда-выражения, где проверяемое исключение выбросить напрямую нельзя:

import java.io.IOException; import java.io.UncheckedIOException; import java.util.List; public class Main { public static void main(String[] args) { List.of("abcde", "12345").forEach(s -> { try { process(s); } catch (IOException e) { throw new UncheckedIOException("Processing failed for: " + s, e); } }); } public static void process(String s) throws IOException { if (s.length() > 3) { throw new IOException("String too long"); } System.out.println("Processed: " + s); } }

Результат выполнения кода:

Exception in thread "main" java.io.UncheckedIOException: Processing failed for: abcde at Main.lambda$main$0(Main.java:11) at java.base/java.util.List.forEach(List.java:1583) at Main.main(Main.java:9) Caused by: java.io.IOException: String too long at Main.process(Main.java:18) at Main.lambda$main$0(Main.java:9) ... 2 more

Пример

Давайте получим исходное исключение через метод getCause и восстановим его тип:

import java.io.IOException; import java.io.UncheckedIOException; public class Main { public static void main(String[] args) { try { throw new UncheckedIOException( new IOException("Original error") ); } catch (UncheckedIOException e) { IOException cause = e.getCause(); System.out.println("Type: " + cause.getClass().getSimpleName()); System.out.println("Message: " + cause.getMessage()); } } }

Результат выполнения кода:

"Type: IOException" "Message: Original error"

Смотрите также

  • класс IOException,
    который оборачивается в UncheckedIOException
  • класс RuntimeException,
    родительский класс для UncheckedIOException
  • оператор throw,
    который выбрасывает исключение
  • конструкция try-with-resources,
    которая автоматически закрывает ресурсы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить