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 remettre des erreurs
    • 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 à des éléments hors taille du 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 Erreurs de programmation
Récupération Souvent possible si anticipée Généralement impossible
Mécanisme de récupération try/catch ou throws Mieux vaut coder 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 d'Exception qui ne sont pas des sous-classes de RuntimeException sont des exceptions vérifiées
    • Doivent être traitées (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éder à 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 Quand elle est levée
ArithmeticException Calculs invalides, comme une division par 0
IndexOutOfBoundsException Indice hors plage pour un tableau, une chaîne, etc.
NegativeArraySizeException Création d'un tableau avec une taille négative
int y = 5/0; // Code provoquant une ArithmeticException
int[] list = new int[-1];  // Code provoquant 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 « vérifiée »

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...