Essais et captures

Types de données et exceptions en Java

Jim White

Java Developer

Problèmes en Java

  • Des problèmes peuvent survenir dans les applications
    • À cause de mauvaises entrées
    • À cause d'erreurs de code
    • À cause d'imprévus
  • Ces problèmes sont des exceptions
    • Elles interrompent le flot normal d'exécution
  • Java lance des exceptions
Types de données et exceptions en Java

Exemple d'exception

public static void main(String[] args) {
    ArrayList<String> allStars = new ArrayList<String>();
    allStars.add("Mays");
    allStars.add("Aaron");
    allStars.add("Ruth");
    String last = allStars.get(3); // This will cause an exception
    System.out.println(last);
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 3 out of 
bounds for length 3
Types de données et exceptions en Java

Try

  • Encadrez le code qui peut générer une exception avec un bloc try
    • « Essayez ce code et, s'il y a un problème, passez-le au bloc catch »
try {
    // Instructions à exécuter et surveiller pour des exceptions
}
Types de données et exceptions en Java

Catch

  • Placez un bloc catch après le try
    • Sert de gestionnaire pour traiter l'exception
    • L'exception capturée est transmise en paramètre
  • Les blocs try/catch sont requis pour certains types d'exceptions
    • Facultatifs pour d'autres
try {
    // Instructions à exécuter et surveiller pour des exceptions
} catch (<Exception type> <variable name>) {
    // Instructions à exécuter si une exception s'est produite
}
Types de données et exceptions en Java

Capturer IndexOutOfBoundsException

try {
  ArrayList<String> allStars = new ArrayList<String>();
  allStars.add("Mays");
  allStars.add("Aaron");
  allStars.add("Ruth");
  String last = allStars.get(3); // Accessing an element that isn't there
  System.out.println(last);
} catch (IndexOutOfBoundsException e) {
  System.out.println("Oups - mauvais indice");
}
Oups - mauvais indice
Types de données et exceptions en Java

Captures multiples

  • Utilisez plusieurs blocs catch pour gérer différents types d'exceptions
  • Chaque catch a son propre type d'exception et sa variable
  • Quand une exception survient, Java parcourt les catch dans l'ordre jusqu'à trouver une correspondance
try {
    ArrayList<String> nums 
      = new ArrayList<String>();
    nums.add("one");
    String last = nums.get(0);
    Integer.valueOf(last);
    System.out.println(last);
} catch (IndexOutOfBoundsException eIndex) {
    System.out.println("Oups - mauvais indice");
} catch (NumberFormatException eValueOf) {
    System.out.println(
      "Oups - la chaîne n'est pas un nombre");
}
Oups - la chaîne n'est pas un nombre
Types de données et exceptions en Java

Capture « tout »

  • Utilisez catch (Exception variable){ } comme filet de sécurité
    • Gère toute exception non traitée par les autres blocs catch
try {
    // Code à essayer
} catch (IndexOutOfBoundsException eIndex) {
    System.out.println("Oups - mauvais indice");
} catch (NumberFormatException eValueOf) {
    System.out.println("Oups - la chaîne n'est pas un nombre");
} catch (Exception e) { // Gère toutes les exceptions sauf les deux ci-dessus
    System.out.println("Quelque chose d'imprévu s'est produit");
}
Types de données et exceptions en Java

Finally

  • Le code dans finally s'exécute toujours
// Quand une exception survient
try {
    Integer.valueOf("one");
} catch (NumberFormatException eValueOf) {
    System.out.println("Oups");
} finally {
    System.out.println("Nettoyage en cours");
}
Oups
Nettoyage en cours

 

// Quand aucune exception n'est lancée
try {
    Integer.valueOf("1");
} catch (NumberFormatException eValueOf) {
    System.out.println("Oups");
} finally {
    System.out.println("Nettoyage en cours");
}
Nettoyage en cours
Types de données et exceptions en Java

Objet Exception

  • L'objet Exception passé au bloc catch contient beaucoup d'information
  • Utilisez ses méthodes pour comprendre la cause
    • .getMessage() pour le message lisible
    • .getClass() pour le nom de la classe ou du type d'Exception
    • .printStackTrace() pour afficher la pile d'appels (diapo suivante)
public class ExceptionExample {

    public static void main(String[] args) {
        try {
            Integer.valueOf("one");
        } catch (NumberFormatException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}
Types de données et exceptions en Java

Pile d'appels de l'exception

  • La pile d'appels retrace le flot d'exécution menant au problème
    • Ci-dessous : résultat du code précédent, incluant la pile d'appels imprimée
For input string: "one"
java.lang.NumberFormatException: For input string: "one"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    at java.base/java.lang.Integer.parseInt(Integer.java:661)
    at java.base/java.lang.Integer.valueOf(Integer.java:988)
    at foo/exceptions.ExceptionExample.main(ExceptionExample.java:7)
Types de données et exceptions en Java

Passons à la pratique !

Types de données et exceptions en Java

Preparing Video For Download...