Создание пользовательских исключений на Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/DataStructuresGroup -.-> java/arrays("Arrays") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/constructors("Constructors") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") subgraph Lab Skills java/arrays -.-> lab-117405{{"Создание пользовательских исключений на Java"}} java/classes_objects -.-> lab-117405{{"Создание пользовательских исключений на Java"}} java/constructors -.-> lab-117405{{"Создание пользовательских исключений на Java"}} java/exceptions -.-> lab-117405{{"Создание пользовательских исключений на Java"}} java/arraylist -.-> lab-117405{{"Создание пользовательских исключений на Java"}} end

Создайте класс Java под названием MyArray

Сначала мы создадим класс Java под названием MyArray, чтобы реализовать массив с методом get(), который может выбросить исключение, если индекс является недействительным.

public class MyArray {
    int[] array;

    public MyArray(int size) {
        array = new int[size];
        for (int i = 0; i < size; i++) {
            array[i] = i * 5;
        }
    }

    // Метод get, который может выбросить исключение
    public int get(int index) {
        if (index >= array.length) {
            throw new IndexOutOfBoundsException("Index " + index + " is invalid.");
        } else {
            return array[index];
        }
    }
}

Создайте пользовательское проверяемое исключение

Мы можем создать пользовательское проверяемое исключение, расширив класс Exception. В этом примере мы создадим IndexNotValidException, когда индекс является недействительным. Это исключение будет выброшено методом get() в классе MyArray.

public class IndexNotValidException extends Exception {
    public IndexNotValidException(String message) {
        super(message);
    }
}

Теперь мы можем обновить метод get() в классе MyArray, чтобы выбросить это пользовательское исключение.

public int get(int index) throws IndexNotValidException {
    if (index >= array.length) {
        throw new IndexNotValidException("Index " + index + " is invalid.");
    } else {
        return array[index];
    }
}

Обработайте пользовательское проверяемое исключение

Для обработки пользовательского проверяемого исключения необходимо его перехватить или объявить с использованием ключевого слова throws при вызове метода get() в классе Demo.

public class Demo {
    public static void main(String[] args) {
        MyArray arr = new MyArray(5);
        try {
            System.out.println(arr.get(10)); // Throws IndexNotValidException
        } catch (IndexNotValidException e) {
            System.err.println(e.getMessage());
        }
    }
}

Создайте пользовательское непроверяемое исключение

Мы можем создать пользовательское непроверяемое исключение, расширив класс RuntimeException вместо класса Exception. В следующем примере мы создадим IndexNotValidRuntimeException, когда индекс является недействительным, которое будет выброшено методом get() в классе MyArray.

public class IndexNotValidRuntimeException extends RuntimeException {
    public IndexNotValidRuntimeException(String message, Throwable cause) {
        super(message, cause);
    }
}

此外,我们定义一个可抛出的异常,它定义了底层异常或我们异常的原因。在我们的例子中,底层异常是ArrayIndexOutOfBounds。我们可以更新MyArray类中的get()方法,以抛出自定义的未检查异常。

public int get(int index) {
    if (index >= array.length) {
        Throwable cause = new ArrayIndexOutOfBoundsException();
        throw new IndexNotValidRuntimeException("Index " + index + " is invalid.", cause);
    } else {
        return array[index];
    }
}

Обработайте пользовательское непроверяемое исключение

Нам не нужно ловить или объявлять пользовательское непроверяемое исключение. В следующем примере, когда метод get() вызывается с недействительным индексом в классе Demo, будет выброшено IndexNotValidRuntimeException.

public class Demo {
    public static void main(String[] args) {
        MyArray arr = new MyArray(5);
        System.out.println(arr.get(10)); // Throws IndexNotValidRuntimeException
    }
}

Резюме

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