Contenu du cours
Bibliothèque Java JUnit. Types de Tests
Bibliothèque Java JUnit. Types de Tests
Création d'Exceptions
Il est temps de passer à créer vos propres exceptions personnalisées que vous pouvez lancer dans vos programmes. Tout d'abord, il est important de noter qu'il existe deux types d'exceptions.
Types d'Exceptions en Java
-
Exceptions Vérifiées : Ce sont des exceptions qui doivent être soit capturées soit déclarées dans la signature de la méthode. Elles sont vérifiées à la compilation.
Exemple :IOException
; -
Exceptions Non Vérifiées : Ces exceptions ne sont pas vérifiées à la compilation. Elles indiquent généralement des erreurs de programmation, telles que des erreurs logiques ou une utilisation incorrecte de l'API.
Exemple :NullPointerException
.
Remarque
Vous avez peut-être remarqué qu'à ce stade, nous avons discuté des exceptions non vérifiées car elles affectent la logique de l'application. Dans ce chapitre, nous utiliserons également des exceptions non vérifiées, qui signifient des erreurs dans la logique d'une méthode/application.
Créer des Exceptions Personnalisées
Pour créer une exception personnalisée en Java, vous étendez généralement soit Exception
( pour les exceptions vérifiées ) soit RuntimeException
( pour les exceptions non vérifiées ).
Étapes pour Créer une Exception Personnalisée :
- Définir une Nouvelle Classe : Votre classe d'exception doit étendre soit
Exception
soitRuntimeException
, selon si vous voulez qu'elle soit une exception vérifiée ou non vérifiée; - Surcharge de Constructeur : Définissez des constructeurs pour votre classe d'exception. Vous pouvez créer plusieurs constructeurs pour transmettre différents types d'informations sur l'exception ( par exemple, un message simple ou une autre cause throwable ).
Exemple d'une Exception Personnalisée Vérifiée :
CustomCheckedException
public class CustomCheckedException extends Exception { public CustomCheckedException(String message) { super(message); } // Additional constructors can be added if needed }
Exemple d'une Exception Non Vérifiée Personnalisée :
CustomUncheckedException
public class CustomUncheckedException extends RuntimeException { public CustomUncheckedException(String message) { super(message); } // Additional constructors can be added if needed }
Pratique
Maintenant, pratiquons un peu et créons notre propre exception, qui sera utilisée lorsque l'utilisateur n'a pas l'âge requis pour acheter quelque chose dans une boutique en ligne. Cette exception devrait avoir un nom qui représente l'erreur qu'elle indique.
Par exemple, NotOfLegalAgeException
ou PurchaseProhibitedException
.
Remarque
Cette exception sera non vérifiée car une telle erreur viole la logique du programme.
Maintenant, nous pouvons utiliser cette exception dans notre code et la lancer dans des méthodes. Écrivons une méthode qui vérifie l'âge de l'utilisateur et lance une exception s'il est âgé de moins de 21 ans.
main
package com.example; public class Main { public static void main(String[] args) { User bob = new User("bob@bobmail.com", "Bob", "some properties..", 20); InternetShopService shopService = new InternetShopService(); shopService.order(bob, "Tequila", 21); } } class InternetShopService { public boolean checkAge(User user, int requiredAge) { return user.getAge() >= requiredAge; } public void order(User user, String item, int requiredAge) { boolean permission = checkAge(user, requiredAge); if (permission) { System.out.println("Ordered successfully!"); } else { throw new PurchaseProhibitedException( String.format("You can't buy %s till you reach %d years old", item, requiredAge)); } //database operations } // other methods } class User { private String email; private String name; private String properties; private int age; public User(String email, String name, String properties, int age) { this.email = email; this.name = name; this.properties = properties; this.age = age; } public int getAge() { return age; } } class PurchaseProhibitedException extends RuntimeException { public PurchaseProhibitedException(String message) { super(message); } }
Comme vous pouvez le voir, nous utilisons l'exception que nous avons créée dans le code. Maintenant, il ne reste plus qu'à gérer cette exception lorsque la méthode qui la lance est appelée et à imprimer le message d'exception sur la console. Nous le ferons, bien sûr, en utilisant une structure try-catch
.
main
package com.example; public class Main { public static void main(String[] args) { User bob = new User("bob@bobmail.com", "Bob", "some properties..", 20); InternetShopService shopService = new InternetShopService(); try { shopService.order(bob, "Tequila", 21); } catch (PurchaseProhibitedException e) { System.out.println("Exception caught: " + e.getMessage()); } } } class InternetShopService { public boolean checkAge(User user, int requiredAge) { return user.getAge() >= requiredAge; } public void order(User user, String item, int requiredAge) { boolean permission = checkAge(user, requiredAge); if (permission) { System.out.println("Ordered successfully!"); } else { throw new PurchaseProhibitedException( String.format("You can't buy %s till you reach %d years old", item, requiredAge)); } //database operations } // other methods } class User { private String email; private String name; private String properties; private int age; public User(String email, String name, String properties, int age) { this.email = email; this.name = name; this.properties = properties; this.age = age; } public int getAge() { return age; } } class PurchaseProhibitedException extends RuntimeException { public PurchaseProhibitedException(String message) { super(message); } }
Maintenant, vous pouvez créer vos propres exceptions personnalisées et les lancer dans votre code. Excellent !
1. Quels sont les deux principaux types d'exceptions en Java ?
2. Lors de la création d'une exception vérifiée personnalisée, quelle classe doit-elle étendre ?
3. Quelle est une caractéristique clé des exceptions non vérifiées en Java ?
4. Dans l'exemple fourni, quel est le but de la classe PurchaseProhibitedException
?
5. Que fait l'appel super(message)
dans le constructeur de PurchaseProhibitedException
?
Merci pour vos commentaires !