Différences entre exception et erreur

J’essaie d’en savoir plus sur les bases de Java et les différents types de Throwables. Quelqu’un peut-il me faire connaître les différences entre les exceptions et les erreurs?

    Les erreurs ne doivent pas être détectées ou manipulées (sauf dans les cas les plus rares). Les exceptions sont le pain et le beurre de la gestion des exceptions. Le Javadoc explique bien:

    Une erreur est une sous-classe de Throwable qui indique des problèmes sérieux qu’une application raisonnable ne doit pas tenter d’attraper. La plupart de ces erreurs sont des conditions anormales.

    Examinez quelques-unes des sous-classes de Error , en prenant certains de leurs commentaires JavaDoc:

    • AnnotationFormatError – Émis lorsque l’parsingur d’annotations tente de lire une annotation à partir d’un fichier de classe et détermine que l’annotation est incorrecte.
    • AssertionError – Renvoyé pour indiquer qu’une assertion a échoué.
    • LinkageError – Les sous-classes de LinkageError indiquent qu’une classe a une dépendance par rapport à une autre classe; cependant, la dernière classe a été modifiée de manière incompatible après la compilation de l’ancienne classe.
    • VirtualMachineErrorVirtualMachineError pour indiquer que la machine virtuelle Java est cassée ou est à court de ressources nécessaires pour continuer à fonctionner.

    Il y a vraiment trois sous-catégories importantes de Throwable :

    • Error – Quelque chose d’assez grave a mal tourné, la plupart des applications devraient planter au lieu d’essayer de résoudre le problème,
    • Exception non RuntimeException ( RuntimeException ) – Très souvent une erreur de programmation telle qu’une NullPointerException ou un argument illégal. Les applications peuvent parfois gérer ou récupérer à partir de cette catégorie Throwable – ou du moins la prendre à la méthode run() de Thread, enregistrer la réclamation et continuer à exécuter.
    • Exception vérifiée (aka Everything else) – On s’attend à ce que les applications puissent intercepter et faire quelque chose avec le rest, telles que FileNotFoundException et TimeoutException

    Cette diapositive montrant la hiérarchie des exceptions de Java par @ georgios-gousios explique de manière concise les différences entre les erreurs et les exceptions en Java.

    Hiérarchie des exceptions Java

    Les erreurs ont tendance à signaler la fin de votre application telle que vous la connaissez. Il ne peut généralement pas être récupéré et devrait provoquer la sortie de votre machine virtuelle. Les récupérer ne devrait pas être fait, sauf pour enregistrer ou afficher éventuellement un message approprié avant de quitter.

    Exemple: OutOfMemoryError – Vous ne pouvez pas faire grand chose car votre programme ne peut plus fonctionner.

    Les exceptions sont souvent récupérables et même lorsqu’elles ne le sont pas, elles signifient généralement qu’une tentative d’opération a échoué, mais votre programme peut toujours continuer.

    Exemple: IllegalArgumentExceptionPassage de données non valides à une méthode pour que cet appel de méthode échoue, mais cela n’affecte pas les opérations futures.

    Ce sont des exemples simplistes, et il existe une autre richesse d’informations sur les seules exceptions.

    Sun le met au mieux :

    Une erreur est une sous-classe de Throwable qui indique des problèmes sérieux qu’une application raisonnable ne doit pas tenter d’attraper.

    La description de la classe Error est assez claire:

    Une Error est une sous-classe de Throwable qui indique des problèmes sérieux qu’une application raisonnable ne doit pas tenter d’attraper. La plupart de ces erreurs sont des conditions anormales. L’erreur ThreadDeath , bien qu’une condition “normale”, est également une sous-classe d’ Error car la plupart des applications ne doivent pas essayer de l’attraper.

    Une méthode n’est pas obligée de déclarer dans sa clause throws des sous-classes d’ Error susceptibles d’être lancées pendant l’exécution de la méthode mais non interceptées, car ces erreurs sont des conditions anormales qui ne devraient jamais se produire.

    Cité à partir de la documentation de Java concernant la classe Error .

    En bref, vous ne devriez pas intercepter Error s, sauf si vous avez une bonne raison de le faire. (Par exemple, pour empêcher que votre implémentation de serveur Web se bloque si une servlet manque de mémoire ou quelque chose du genre.)

    Une Exception , par contre, n’est qu’une exception normale, comme dans toute autre langue moderne. Vous trouverez une description détaillée dans la documentation de l’API Java ou toute ressource en ligne ou hors ligne.

    Erreurs –

    1. Error dans Java sont de type java.lang.Error .
    2. Toutes les erreurs dans Java sont de type non vérifié.
    3. Error se produisent au moment de l’exécution. Ils ne seront pas connus du compilateur.
    4. Il est impossible de récupérer des erreurs.
    5. Error sont principalement dues à l’environnement dans lequel l’application s’exécute.
    6. Exemples: java.lang.StackOverflowError , java.lang.OutOfMemoryError

    Exceptions –

    1. Exception dans Java sont de type java.lang.Exception .
    2. Exception incluent à la fois le type coché et le type non vérifié.
    3. Les exceptions vérifiées sont connues du compilateur car les exceptions non vérifiées ne sont pas connues du compilateur car elles se produisent au moment de l’exécution.
    4. Vous pouvez récupérer des exceptions en les manipulant via try-catch blocs try-catch .
    5. Exception sont principalement causées par l’application elle-même.
    6. Exemples: Exceptions SQLException : SQLException , IOException
      Exceptions non vérifiées: ArrayIndexOutOfBoundException , ClassCastException , NullPointerException

    Lectures complémentaires: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/ http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png

    Il existe plusieurs similitudes et différences entre les classes java.lang.Exception et java.lang.Error .

    Similitudes:

    • Tout d’abord, les deux classes étendent java.lang.Throwable et, par conséquent, héritent de nombreuses méthodes courantes pour traiter les erreurs, telles que: getMessage , getStackTrace , printStackTrace , etc.

    • Deuxièmement, en tant que sous-classes de java.lang.Throwable elles héritent toutes deux des propriétés suivantes:

      • Throwable elle-même et l’une de ses sous-classes (y compris java.lang.Error ) peuvent être déclarées dans la liste des exceptions de méthode à l’aide du mot clé throws. Cette déclaration est requirejse uniquement pour java.lang.Exception et les sous-classes, pour java.lang.Throwable , java.lang.Error et java.lang.RuntimeException et leurs sous-classes, il est facultatif.

      • Seuls java.lang.Throwable et les sous-classes peuvent être utilisés dans la clause catch .

      • Seul java.lang.Throwable et les sous-classes peuvent être utilisés avec keyword- throw .

    La conclusion de cette propriété suit java.lang.Error et java.lang.Exception peut être déclarée dans l’en-tête de la méthode, peut être dans la clause catch , peut être utilisée avec le throw mot clé.

    Différences:

    • Première différence conceptuelle: java.lang.Error conçue pour être lancée par la JVM et indiquant des problèmes sérieux et destinée à arrêter l’exécution du programme au lieu d’être interceptée (mais cela est possible comme pour tout autre successeur java.lang.Throwable ).

      Un passage de la description de javadoc à propos de java.lang.Error :

      … indique des problèmes sérieux qu’une application raisonnable ne devrait pas tenter de saisir.

      En face java.lang.Exception conçu pour représenter les erreurs attendues et pouvant être traitées par un programmeur sans terminer l’exécution du programme.

      Un passage de la description de javadoc à propos de java.lang.Exception :

      … indique les conditions qu’une application raisonnable peut vouloir intercepter.

    • La seconde différence entre java.lang.Error et java.lang.Exception première à considérer une exception non vérifiée pour la vérification des exceptions à la compilation. En tant que code de résultat, java.lang.Error ou ses sous-classes n’ont pas besoin de déclarer cette erreur dans l’en-tête de la méthode. Lors du lancement de java.lang.Exception déclaration requirejse dans l’en-tête de la méthode.

    Throwable et son diagramme de classes successeur (les propriétés et les méthodes sont omises). entrer la description de l'image ici

    IMO une erreur est quelque chose qui peut provoquer l’échec de votre application et ne doit pas être traitée. Une exception est quelque chose qui peut entraîner des résultats imprévisibles, mais qui peuvent être récupérés.

    Exemple:

    Si un programme est à court de mémoire, il s’agit d’une erreur car l’application ne peut pas continuer. Toutefois, si un programme accepte un type d’entrée incorrect, il s’agit d’une exception car le programme peut le gérer et redirect pour recevoir le type d’entrée correct.

    Voici un très bon résumé de l’API Java: une erreur et une exception:

    Une erreur est une sous-classe de Throwable qui indique des problèmes sérieux qu’une application raisonnable ne doit pas tenter d’attraper. La plupart de ces erreurs sont des conditions anormales. L’erreur ThreadDeath, bien qu’une condition “normale”, est également une sous-classe d’Erreur car la plupart des applications ne doivent pas essayer de l’attraper.

    Une méthode n’est pas obligée de déclarer dans sa clause throws des sous-classes d’Erreur susceptibles d’être lancées pendant l’exécution de la méthode mais non interceptées, car ces erreurs sont des conditions anormales qui ne devraient jamais se produire.

    OTOH, pour les exceptions, Java API dit:

    La classe Exception et ses sous-classes sont une forme de Throwable qui indique les conditions qu’une application raisonnable peut vouloir intercepter.

    Les erreurs sont principalement causées par l’environnement dans lequel l’application s’exécute. Par exemple, OutOfMemoryError se produit lorsque JVM est à court de mémoire ou que StackOverflowError se produit lorsque des débordements de stack.

    Les exceptions sont principalement causées par l’application elle-même. Par exemple, NullPointerException se produit lorsqu’une application tente d’accéder à un object nul ou que ClassCastException se produit lorsqu’une application tente de convertir des types de classe incompatibles.

    Source: Différence entre les erreurs et les exceptions en Java