Создание собственного исключения в Java — пример класса Exception

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

Пример 1: программа на Java для создания собственного проверяемого исключения

import java.util.ArrayList;
import java.util.Arrays;

// create a checked exception class
class CustomException extends Exception {
  public CustomException(String message) {
    // call the constructor of Exception class
    super(message);
  }
}

class Main {

  ArrayList<String> languages = new ArrayList<>(Arrays.asList("Java", "Python", "JavaScript"));

  // check the exception condition
  public void checkLanguage(String language) throws CustomException {

    // throw exception if language already present in ArrayList
    if(languages.contains(language)) {
      throw new CustomException(language + " already exists");
    }
    else {
      // insert language to ArrayList
      languages.add(language);
      System.out.println(language + " is added to the ArrayList");
    }
  }

  public static void main(String[] args) {

    // create object of Main class
    Main obj = new Main();

    // exception is handled using try...catch
    try {
      obj.checkLanguage("Swift");
      obj.checkLanguage("Java");
    }

    catch(CustomException e) {
      System.out.println("[" + e + "] Exception Occured");
    }
  }
}

Вывод:

Swift is added to the ArrayList
[CustomException: Java already exists] Exception Occured

В этом примере мы расширили класс Exception, чтобы создать собственное исключение CustomException. Конструктор класса Exception вызывается из CustomException с помощью ключевого слова super.

Внутри метода checkLanguage() проверяется условие исключения, и если оно возникает, блок try..catch обрабатывает его.

Примечание

Это проверяемое (checked) исключение. В Java можно создавать и непроверяемые (unchecked) исключения.

Пример 2: создание собственного непроверяемого исключения

import java.util.ArrayList;
import java.util.Arrays;

// create a unchecked exception class
class CustomException extends RuntimeException {
  public CustomException(String message) {
    // call the constructor of RuntimeException
    super(message);
  }
}

class Main {

  ArrayList<String> languages = new ArrayList<>(Arrays.asList("Java", "Python", "JavaScript"));

  // check the exception condition
  public void checkLanguage(String language) {

    // throw exception if language already present in ArrayList
    if(languages.contains(language)) {
      throw new CustomException(language + " already exists");
    }
    else {
      // insert language to ArrayList
      languages.add(language);
      System.out.println(language + " is added to the ArrayList");
    }
  }

  public static void main(String[] args) {

    // create object of Main class
    Main obj = new Main();

    // check if language already present
    obj.checkLanguage("Swift");
    obj.checkLanguage("Java");
  }
}

Вывод:

Swift is added to the ArrayList
Exception in thread "main" CustomException: Java already exists
        at Main.checkLanguage(Main.java:21)
        at Main.main(Main.java:37)

В этом примере мы расширили класс RuntimeException, чтобы создать собственное непроверяемое исключение.

Важно

Обратите внимание: блок try...catch здесь не используется. Это потому, что непроверяемые исключения проверяются во время выполнения. В остальном функциональность совпадает с предыдущим примером.