Создание собственного исключения в 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 здесь не используется. Это потому, что непроверяемые исключения проверяются во время выполнения. В остальном функциональность совпадает с предыдущим примером.