Propagation

Types de données et exceptions en Java

Jim White

Java Developer

Options de gestion

  • Les exceptions vérifiées exigent une « gestion »
    • La « gestion » des exceptions d'exécution est facultative
  • Deux options pour « gérer »
    • Utiliser try/catch pour capturer l'Exception et écrire le code de traitement
    • « Lancer » l'exception
  • Try/catch est la méthode privilégiée pour gérer une exception
    • Pas toujours possible ; parfois mieux de centraliser la gestion des exceptions
Types de données et exceptions en Java

Mot-clé throws

  • Utilisez throws sur toute méthode pour renvoyer l'exception à l'appelant
    • Plutôt que de la gérer dans la méthode
    • Appelé « lancer une exception » ou « refiler la patate chaude »
    • Transférer la responsabilité de gestion à l'appelant
  • Utilisez une liste d'exceptions séparées par des virgules après throws
    • Indique quels types d'exceptions l'appelant doit anticiper
public static void someMethod() throws IndexOutOfBoundsException, 
NegativeArraySizeException, NullPointerException {
  // method code
}
Types de données et exceptions en Java
Exemple avec throws

Try/catch classique pour gérer une Exception

public static void main(String[] args) {
  someMethod();
}
public static void someMethod(){
  try {
    ArrayList<String> games
      = new ArrayList<String>();
    games.add("Monopoly");
    games.add("Chess");
    games.get(3);
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "Oups : tentative d'accès à un élément inexistant");
  }
}

Throws pour gérer une Exception

public static void main(String[] args) {
  try {
    someMethod();
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "someMethod a tenté d'accéder à un élément inexistant");
  }
}
public static void someMethod()
      throws IndexOutOfBoundsException {
  ArrayList<String> games
    = new ArrayList<String>();
  games.add("Monopoly");
  games.add("Chess");
  games.get(3);
}
Types de données et exceptions en Java

Quand utiliser throws

  • « Refiler la patate chaude » ou lancer une exception est à éviter
    • Mieux vaut, en général, try/catch là où elle se produit
  • Raisons de lancer plutôt que d'utiliser try/catch :
    • La méthode d'origine ne sait pas comment corriger
    • Centraliser la gestion pour éviter du code try/catch redondant

Le lancement d'une exception est surtout utilisé avec des exceptions personnalisées

1 Photo from https://unsplash.com/@philipparosetite
Types de données et exceptions en Java

Catcher et relancer

  • Une Exception peut être « relancée »
    • Une méthode appelante déclare aussi throws au lieu d'un try/catch
  • Relancer depuis main arrêtera l'application

Les exceptions peuvent être relancées jusqu'aux méthodes appelantes

Types de données et exceptions en Java

Exemple : relancer

public class RethrowExample {
    public static void main(String[] args) {
        try {
            method1(0);
        } catch (ArithmeticException e) {
            System.out.println("Oups : quotient invalide");
        }
    }
    public static void method1(int divisor) throws ArithmeticException {
        method2(divisor);
    }
    public static void method2 (int divisor) throws ArithmeticException {
        int z = 5/divisor;
        System.out.println(z);
    }
}
Types de données et exceptions en Java

Passons à la pratique !

Types de données et exceptions en Java

Preparing Video For Download...