Menu
Coddy logo textTech

Exceptions personnalisées

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy. Leçon 60 sur 87.

Les exceptions intégrées de Java couvrent de nombreux scénarios d’erreur courants, mais vous avez parfois besoin d’exceptions spécifiques au domaine de votre application. Les exceptions custom vous permettent de créer des types d’erreur significatifs qui communiquent clairement ce qui s’est mal passé.

Pour créer une exception personnalisée, étendez simplement une classe d’exception existante. Pour une exception vérifiée, étendez Exception :

public class InsufficientFundsException extends Exception {
    public InsufficientFundsException(String message) {
        super(message);
    }
}

Pour une exception non vérifiée, étendez RuntimeException :

public class InvalidAgeException extends RuntimeException {
    public InvalidAgeException(String message) {
        super(message);
    }
}

L’appel super(message) transmet le message d’erreur à la class parente, le rendant available via getMessage(). Tu peux ensuite lancer et intercepter ton custom exception comme n’importe quelle autre :

public void withdraw(double amount) throws InsufficientFundsException {
    if (amount > balance) {
        throw new InsufficientFundsException("Balance too low: " + balance);
    }
    balance -= amount;
}

// Utilisation
try {
    account.withdraw(1000);
} catch (InsufficientFundsException e) {
    System.out.println(e.getMessage());
}

Les exceptions personnalisées rendent votre code plus lisible et permettent aux appelants de gérer différemment des conditions d’erreur spécifiques. Elles sont particulièrement utiles lors de la création d’API ou de bibliothèques, où une communication claire des erreurs est importante.

challenge icon

Défi

Facile

Construisons un système de réservation de billets qui utilise des exceptions custom pour gérer différents scénarios d'erreur ! Vous créerez des types d'exception explicites qui indiquent clairement ce qui s'est mal passé lors de la réservation de billets.

Vous organiserez votre code dans quatre fichiers :

  • TicketSoldOutException.java : Créez une exception custom checked (extends Exception) lorsque les billets ne sont plus available. Votre exception doit accepter un message dans son constructeur et le transmettre à la classe parente avec super(message).
  • InvalidSeatException.java : Créez une exception custom unchecked (extends RuntimeException) lorsqu'une personne tente de réserver un numéro de siège invalid. Cette exception doit également accepter et transmettre un message à sa classe parente.
  • TicketBooth.java : Créez une class qui manages la vente de billets. Votre guichet doit suivre le number total de sièges available ainsi que le plus grand numéro de siège valide. Incluez :

    Un constructeur qui prend le number total de sièges available.

    Une bookTicket(int seatNumber) method qui valide la réservation. Si aucun billet ne reste (le number de sièges available est égal ou inférieur à 0), lancez une TicketSoldOutException avec le message "No tickets remaining". Si le numéro de siège est inférieur à 1 ou supérieur au total de sièges, lancez une InvalidSeatException avec le message "Seat [seatNumber] does not exist". Otherwise, diminuez le number de sièges available de 1 et affichez Booked seat [seatNumber] successfully.

    Une method getAvailableSeats() qui renvoie le count actuel de sièges available.

  • Main.java : Assemblez votre système de réservation de billets ! Vous recevrez deux entrées : le number total de sièges et un numéro de siège à réserver.

    Créez un TicketBooth avec le total de sièges given. Tentez ensuite de réserver le numéro de siège spécifié dans un bloc try-catch. Puisque TicketSoldOutException est checked, vous must le gérer. Interceptez TicketSoldOutException en first et affichez Booking failed: [exception message]. Interceptez ensuite InvalidSeatException et affichez le même format : Booking failed: [exception message].

    After le bloc try-catch, affichez Remaining seats: [count] en utilisant la method getter.

Vous recevrez deux entrées dans l'ordre : le total de sièges (entier) et le numéro de siège à réserver (entier).

Remarquez comment les exceptions checked obligent les appelants à les gérer (avec try-catch ou throws), tandis que les exceptions unchecked ne nécessitent pas de gestion explicite. Choisissez le type d'exception selon que l'erreur est quelque chose que les appelants doivent anticiper et traiter !

Essayez vous-même

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int totalSeats = scanner.nextInt();
        int seatNumber = scanner.nextInt();
        
        // TODO: Créer un TicketBooth avec le nombre total de sièges donné
        
        // TODO: Utiliser un bloc try-catch pour tenter de réserver le siège
        // - Attraper d'abord TicketSoldOutException et afficher "Booking failed: [exception message]"
        // - Attraper InvalidSeatException et afficher "Booking failed: [exception message]"
        
        // TODO: After the try-catch, print "Remaining seats: [count]"
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Java en ligne