Exemples d’exceptions personnalisées Java

Exemples d'exceptions personnalisées Java

java-custom-exception

En Java, il existe deux types d'exceptions - exception cochée et non cochée. Voici le résumé:

  1. Checked - Etendjava.lang.Exception, pour une condition récupérable, essayez de capturer l'exception explicitement, l'erreur de compilation.

  2. Unchecked - Etendjava.lang.RuntimeException, pour les conditions irrécupérables, comme les erreurs de programmation, pas besoin de try-catch, erreur d'exécution.

1. Exception vérifiée personnalisée

Note
Une exception vérifiée populaire:IOException,FileNotFoundException

1.1 If the client is able to recover from the exception, make it a checked exception. Pour créer une exception cochée personnalisée, étendjava.lang.Exception

NameNotFoundException.java

package com.example.examples.exception;

public class NameNotFoundException extends Exception {

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

}

1.2 For checked exception, you need to try and catch the exception.

CustomerService.java

package com.example.examples;

import com.example.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();
        }

    }
}

Sortie

com.example.examples.exception.NameNotFoundException: Name is empty!
    at com.example.examples.CustomerService.findByName(CustomerService.java:10)
    at com.example.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. Exception personnalisée non vérifiée

Note
Quelques exceptions populaires non vérifiées:NullPointerException,IndexOutOfBoundsException,IllegalArgumentException

2.1 If the client cannot do anything to recover from the exception, make it an unchecked exception. Pour créer une exception personnalisée non cochée, étendjava.lang.RuntimeException

ListTooLargeException.java

package com.example.examples.exception;

public class ListTooLargeException extends RuntimeException{

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

}

2.3 For unchecked exception, try and catch the exception is optional.

CustomerService.java

package com.example.examples;

import com.example.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, "example"));

        obj.analyze(data);


    }
}

Sortie

Exception in thread "main" com.example.examples.exception.ListTooLargeException: List can't exceed 50 items!
    at com.example.examples.CustomerService.analyze(CustomerService.java:25)
    at com.example.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)