Рубрики
Без рубрики

Проверенные и неконтролируемые исключения в Java

Изучите различия между проверенным и неконтролируемым исключением Java с некоторыми примерами

Автор оригинала: baeldung.

1. Обзор

Исключения Java подпадают под две основные категории: проверенные исключения и неконтролируемые . В этой статье мы предоставим некоторые образцы кода о том, как их использовать.

2. Проверенные исключения

Как правило, проверенные исключения представляют ошибки вне управления программой. Например, конструктор FileInputStream бросает FileNotFoundException если входной файл не существует.

Java проверяет проверенные исключения во время компиляции.

Таким образом, мы должны использовать ключевое слово бросков, чтобы объявить проверенное исключение:

private static void checkedExceptionWithThrows() throws FileNotFoundException {
    File file = new File("not_existing_file.txt");
    FileInputStream stream = new FileInputStream(file);
}

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

private static void checkedExceptionWithTryCatch() {
    File file = new File("not_existing_file.txt");
    try {
        FileInputStream stream = new FileInputStream(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

Некоторые общие проверенные исключения на Java IoException , СЛЭксцепция , и ParseException .

Исключение класс является суперклассом проверенных исключений. Таким образом, мы можем создать пользовательский проверенный путем расширения Исключение :

public class IncorrectFileNameException extends Exception {
    public IncorrectFileNameException(String errorMessage) {
        super(errorMessage);
    }
}

3. Неконтролируемые исключения

Если программа бросает неконтролируемое исключение, она отражает некоторую ошибку внутри логики программы. Например, если разделить число на 0, Java будет бросать АрифметикаЭксцепция :

private static void divideByZero() {
    int numerator = 1;
    int denominator = 0;
    int result = numerator / denominator;
}

Java не проверяет неконтролируемые исключения во время компиляции. Кроме того, мы не должны объявлять неконтролируемые исключения в методе с бросает ключевое слово. И хотя вышеуказанный код не имеет никаких ошибок во время компиляции времени, он будет бросать АрифметикаЭксцепция во время выполнения.

Некоторые общие неконтролируемые исключения на Java NullPointerЭксцепция , ArrayIndexOutOfBoundsException , и НезаконныеАргументЭксцепция .

RuntimeException класс является суперклассом всех неконтролируемых исключений. Таким образом, мы можем создать пользовательский неконтролируемый путем расширения RuntimeException :

public class NullOrEmptyException extends RuntimeException {
    public NullOrEmptyException(String errorMessage) {
        super(errorMessage);
    }
}

4. При использовании проверенных исключений и неконтролируемых исключений

Это хорошая практика использования исключений в Java, чтобы мы могли отделить код обработки ошибок от обычного кода. Тем не менее, мы должны решить, какой тип исключения бросить. Oracle Java Документация предоставляет рекомендации по использованию проверенных исключений и неконтролируемых исключений:

“Если клиент может разумно ожидать, чтобы оправиться от исключения, сделать его проверенным исключением. Если клиент не может ничего сделать, чтобы восстановиться после исключения, сделайте его неконтролируемым исключением».

Например, перед тем, как открыть файл, мы можем сначала проверить имя файла ввода. Если имя файла ввода пользователя является недействительным, мы можем сделать специально проверенное исключение:

if (!isCorrectFileName(fileName)) {
    throw new IncorrectFileNameException("Incorrect filename : " + fileName );
}

Таким образом, мы можем восстановить систему, приняв имя файла ввода другого пользователя. Однако, если имя файла ввода является нулевым указателем или это пустая строка, это означает, что у нас есть некоторые ошибки в коде. В этом случае следует сделать неконтролируемое исключение:

if (fileName == null || fileName.isEmpty())  {
    throw new NullOrEmptyException("The filename is null or empty.");
}

5. Заключение

В этой статье мы обсудили разницу между проверенными и неконтролируемыми исключениями. Мы также предоставили несколько примеров кода, чтобы показать, когда использовать проверенные или неконтролируемые исключения.

Как всегда, весь код, найденный в этой статье, можно найти более на GitHub .