Erreurs et exceptions

Types de données et exceptions en Java

Jim White

Java Developer

Exceptions vs erreurs

  • Une Error est un problème grave
  • Les applications ne peuvent pas gérer ni se rétablir après une erreur
    • Les erreurs font « planter » ou arrêter l'application
    • Exemple : un manque de mémoire est une erreur en Java
  • Les applications peuvent gérer et récupérer des exceptions
    • Tenter d'accéder à un élément hors des limites d'un tableau est une exception.
Types de données et exceptions en Java
Exemple d'erreur
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Types de données et exceptions en Java

Deux types d'exceptions

Exception vérifiée Exception d'exécution (« unchecked »)
Gestion requise Oui Non
Cause générale Choses hors de notre contrôle Nos erreurs de programmation
Récupération Généralement possible si prévue Souvent non récupérable
Mécanisme de récupération try/catch ou throws Mieux vaut coder prudemment pour les éviter
Exemple d'exception Fichier introuvable Indice de tableau hors limites
Types de données et exceptions en Java

Exceptions vérifiées et d'exécution

  • Les sous-classes de Exception qui ne sont pas aussi des sous-classes de RuntimeException sont des exceptions vérifiées
    • Doivent être traitées (p. ex. gérées)
    • Ex. : fichier introuvable (FileNotFoundException)
  • RuntimeException est la superclasse de toutes les exceptions non vérifiées
    • Ne nécessitent pas de gestion
    • Ex. : accès à un indice de tableau inexistant (IndexOutOfBoundsException)
    • Ex. : division par zéro (ArithmeticException)
Types de données et exceptions en Java

RuntimeException

Sous-classe de RuntimeException Description du moment où elle est levée
ArithmeticException Mauvais calcul arithmétique, comme une division par 0
IndexOutOfBoundsException Indice utilisé sur un tableau, une chaîne, etc., hors limites
NegativeArraySizeException Tentative de créer un tableau avec une taille négative
int y = 5/0; // Code causant une ArithmeticException
int[] list = new int[-1];  // Code causant une NegativeArraySizeException
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Types de données et exceptions en Java

Exception « checked »

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Types de données et exceptions en Java

Passons à la pratique !

Types de données et exceptions en Java

Preparing Video For Download...