Exemples d'exceptions personnalisées Java
En Java, il existe deux types d'exceptions - exception cochée et non cochée. Voici le résumé:
-
Checked - Etend
java.lang.Exception
, pour une condition récupérable, essayez de capturer l'exception explicitement, l'erreur de compilation. -
Unchecked - Etend
java.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(Listdata) { 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)