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

Примеры Пользовательских Исключений Java

– Примеры Пользовательских Исключений Java

В Java существует два типа исключений – проверенное и непроверенное исключение. Вот краткое изложение:

  1. Проверено – Расширяет java.lang. Исключение , для восстанавливаемого состояния попробуйте явно перехватить исключение, ошибка компиляции.
  2. Непроверенный – Расширяет java.lang. Исключение RuntimeException для неустранимых условий, таких как ошибки программирования , не нужно пытаться поймать, ошибка во время выполнения.

1. Пользовательское Проверенное Исключение

1.1 Если клиент может восстановиться после исключения, сделайте его проверенным исключением. Чтобы создать пользовательское проверяемое исключение, расширьте java.lang. Исключение

package com.mkyong.examples.exception;

public class NameNotFoundException extends Exception {

    public NameNotFoundException(String message) {
        super(message);
    }

}

1.2 Для проверенного исключения вам нужно попытаться поймать исключение.

package com.mkyong.examples;

import com.mkyong.examples.exception.NameNotFoundException;

public class CustomerService {

    public Customer findByName(String name) throws NameNotFoundException {

        if ("".equals(name)) {
            throw new NameNotFoundException("Name is empty!");
        }

        return new Customer(name);

    }

    public static void main(String[] args) {

        CustomerService obj = new CustomerService();

        try {

            Customer cus = obj.findByName("");

        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }

    }
}

Выход

com.mkyong.examples.exception.NameNotFoundException: Name is empty!
	at com.mkyong.examples.CustomerService.findByName(CustomerService.java:10)
	at com.mkyong.examples.CustomerService.main(CustomerService.java:39)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

2. Пользовательское Непроверенное Исключение

2.1 Если клиент не может ничего сделать для восстановления после исключения, сделайте его непроверенным исключением. Чтобы создать пользовательское непроверенное исключение, расширьте java.lang. Исключение времени выполнения

package com.mkyong.examples.exception;

public class ListTooLargeException extends RuntimeException{

    public ListTooLargeException(String message) {
        super(message);
    }

}

2.3 Для непроверенного исключения попробуйте перехватить исключение по желанию.

package com.mkyong.examples;

import com.mkyong.examples.exception.ListTooLargeException;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CustomerService {

    public void analyze(List data) {

        if (data.size() > 50) {
            //runtime exception
            throw new ListTooLargeException("List can't exceed 50 items!");
        }

		//...
    }

    public static void main(String[] args) {

        CustomerService obj = new CustomerService();

		//create 100 size
        List data = new ArrayList<>(Collections.nCopies(100, "mkyong"));

        obj.analyze(data);


    }
}

Выход

Exception in thread "main" com.mkyong.examples.exception.ListTooLargeException: List can't exceed 50 items!
	at com.mkyong.examples.CustomerService.analyze(CustomerService.java:25)
	at com.mkyong.examples.CustomerService.main(CustomerService.java:38)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Рекомендации

  1. Непроверенные Исключения — Противоречие
  2. разница между java.lang. Исключение времени выполнения и java.lang. Исключение

Оригинал: “https://mkyong.com/java/java-custom-exception-examples/”