Différences entre L'Exception et L'erreur

j'essaie D'en savoir plus sur Java basic et les différents types de Throwables, quelqu'un peut-il me faire savoir les différences entre les Exceptions et les erreurs?

144
demandé sur Termininja 2009-05-26 23:39:19

10 réponses

Les erreurs

ne doivent pas être détectées ou traitées (sauf dans les cas les plus rares). Les Exceptions sont le pain et le beurre de la manipulation d'exception. Le Javadoc l'explique bien:

une erreur est une sous-classe de Lancable qui indique des problèmes graves qu'un application raisonnable ne devrait pas essayer de l'attraper. La plupart de ces erreurs sont anormaux condition.

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

  • AnnotationFormatError - lancé lorsque l'analyseur d'annotation tente de lire une annotation à partir d'un fichier de classe et détermine que l'annotation est mal formée.
  • AssertionError - lancé pour indiquer qu'une affirmation a échoué.
  • LinkageError - les sous-classes de LinkageError indiquent qu'une classe dépend d'une autre classe; toutefois, cette dernière classe a changé de façon incompatible après la compilation de l'ancienne classe.
  • VirtualMachineError - lancé pour indiquer que la Machine virtuelle Java est cassée ou a épuisé les ressources nécessaires pour qu'elle continue à 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 plutôt que d'essayer pour traiter le problème,
  • Exception non contrôlée (alias RuntimeException ) - très souvent une erreur de programmation telle qu'une NullPointerException ou un argument illégal. Les Applications peuvent parfois traiter ou récupérer de cette catégorie Throwable -- ou au moins l'attraper à la méthode run() du Thread, enregistrer la plainte, et continuer à fonctionner.
  • coché Exception ( aka tout le reste) - les Applications sont censés être en mesure d'attraper et de faire quelque chose avec le reste, comme FileNotFoundException et TimeoutException ...
146
répondu Eddie 2009-05-26 20:01:14

cette diapositive montrant la hiérarchie D'exception de Java par @georgios-gousios explique de façon concise les différences entre les erreurs et les Exceptions en Java.

Java Exception Hierarchy

24
répondu avandeursen 2017-05-23 12:18:20
Les erreurs

ont tendance à signaler la fin de votre application telle que vous la connaissez. En général, il ne peut pas être récupéré et devrait faire sortir votre VM. Les attraper ne doit pas être fait, sauf pour éventuellement log ou l'affichage et le message approprié avant de sortir.

exemple: OutOfMemoryError - pas grand chose que vous pouvez faire car votre programme ne peut plus fonctionner.

Les Exceptions

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

exemple: IllegalArgumentException - passe des données Invalides à une méthode de sorte que l'appel de méthode a échoué, mais il n'affecte pas les opérations futures.

ce sont des exemples simplistes, et il ya une autre richesse d'informations sur les seules Exceptions.

17
répondu Robin 2009-05-26 19:52:45

Soleil il met le mieux :

une erreur est une sous-classe de Lancable cela indique de graves problèmes qu'un application raisonnable ne devrait pas essayer attraper.

7
répondu Powerlord 2009-05-26 19:48:18

Erreurs -

  1. Error s en java sont de type java.lang.Error .
  2. toutes les erreurs en java sont de type non vérifié.
  3. Error s se produisent au moment de l'exécution. Ils ne seront pas connues de compilateur.
  4. il est impossible de récupérer des erreurs.
  5. Error s sont principalement causées par le l'environnement dans lequel l'application est en cours d'exécution.
  6. exemples : java.lang.StackOverflowError , java.lang.OutOfMemoryError

Exceptions -

  1. Exception s en java sont de type java.lang.Exception .
  2. Exception s comprend à la fois le type vérifié et le type non vérifié.
  3. les exceptions vérifiées sont connues pour compilateur où les exceptions non vérifiées ne sont pas connues du compilateur parce qu'elles se produisent au moment de l'exécution.
  4. vous pouvez récupérer des exceptions en les manipulant à travers les blocs try-catch .
  5. Exception s sont principalement causées par l'application elle-même.
  6. Exemples: Coché Exceptions : SQLException , IOException

    Exceptions Non Vérifiées: ArrayIndexOutOfBoundException , ClassCastException , NullPointerException

autre lecture: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java / http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png

4
répondu roottraveller 2017-09-15 06:19:09

la description de la classe Error est très claire:

un Error est une sous-classe de Throwable cela indique de graves problèmes qu'un application raisonnable ne devrait pas essayer attraper. La plupart de ces erreurs sont conditions anormales. Le ThreadDeath erreur, Bien qu'une condition" normale", est également une sous-classe de Error parce que la plupart les applications ne doivent pas essayer d'attraper il.

une méthode est pas tenus de déclarer à l' sa clause de rejet toutes les sous-classes de Error l'exécution de la méthode, mais pas pris, puisque ces erreurs sont conditions anormales qui ne devraient jamais produire.

, Cité d'après Java own documentation de la classe Error .

en bref, vous ne devriez pas attraper Error s, sauf que vous avez une bonne raison de le faire. (Par exemple pour empêchez votre implémentation de serveur web de se planter si un servlet manque de mémoire ou quelque chose comme ça.)

An Exception , en revanche, 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 dans toute ressource en ligne ou hors ligne.

3
répondu Tobias Müller 2009-05-26 19:50:02

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

similitudes:

  • première-les deux classes s'étendent java.lang.Throwable et en conséquence hérite de nombreuses méthodes qui sont communes à être utilisés lorsqu'il s'agit avec des erreurs telles que: getMessage , getStackTrace , printStackTrace et ainsi de suite.

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

    • 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 aux méthodes en utilisant le mot-clé throws . Cette déclaration n'est requise que pour java.lang.Exception et les sous-classes, pour java.lang.Throwable , java.lang.Error et java.lang.RuntimeException et leurs sous-classes elle est facultative.

    • seulement java.lang.Throwable et sous-classes autorisées dans la clause catch .

    • seulement java.lang.Throwable et les sous - classes peuvent être utilisées avec le mot-clé - throw .

la conclusion de cette propriété est de suivre à la fois java.lang.Error et java.lang.Exception peut être déclaré dans l'en-tête de la méthode, peut être dans catch clause, peut être utilisé avec le mot-clé throw .

différences:

  • première différence conceptuelle: java.lang.Error conçu pour être JVM et indiquent de graves problèmes et ont l'intention d'arrêter exécution de programme au lieu d'être attrapé(mais il est possible que tout autre java.lang.Throwable successeur).

    Un passage de javadoc description java.lang.Error :

    ...indique de graves problèmes d'une application raisonnable devrait ne pas essayer de l'attraper.

    en regard de java.lang.Exception conçu pour représenter les erreurs qui attendu et peut être manipulé par un programmeur sans arrêt l'exécution du programme.

    Un passage de javadoc description java.lang.Exception :

    ...indique les conditions que raisonnable application peut attraper.

  • la deuxième différence entre java.lang.Error et java.lang.Exception que le premier considéré comme un non vérifié exception pour la vérification d'exception de compilation. Comme résultat le lancement de code java.lang.Error ou ses sous-classes ne nécessitent pas de déclarer cette erreur dans l'en-tête de méthode. En lançant java.lang.Exception déclaration requise dans l'en-tête de méthode.

Lancable et diagramme de classe de son successeur (les propriétés et les méthodes sont omises). enter image description here

2
répondu Mikhailov Valentine 2016-05-04 14:59:32

IMO une erreur est quelque chose qui peut causer l'échec de votre application et ne doit pas être traitée. Une exception est quelque chose qui peut causer des résultats imprévisibles, mais peut être récupéré à partir.

exemple:

Si un programme a exécuter de mémoire c'est une erreur que l'application ne peut pas continuer. Toutefois, si un programme accepte une entrée incorrecte, elle est une exception, car le programme peut gérer et de redirection de recevoir le type d'entrée.

1
répondu Mr. Will 2009-05-26 19:50:58

voici un assez bon résumé de L'API Java ce qu'une erreur et une Exception représente:

une erreur est une sous-classe de Lancable qui indique des problèmes graves qu'une application raisonnable ne devrait pas essayer de capturer. La plupart de ces erreurs sont des conditions anormales. L'erreur de ThreadDeath, bien qu'une condition" normale", est aussi une sous-classe d'erreur parce que la plupart des applications ne devraient pas essayer de la saisir.

une méthode n'est pas requise pour déclarer dans sa clause de rejet toutes les sous-classes de Erreur qui pourrait être jeté au cours de la l'exécution de la méthode, mais pas pris, puisque ces erreurs sont conditions anormales qui ne devraient jamais produire.

otoh, que, pour les Exceptions en Java API dit:

l'Exception de classe et ses sous-classes sont une forme de Lancable qui indique des conditions qu'une application raisonnable pourrait vouloir attraper.

0
répondu egaga 2009-05-26 19:50:29

les Erreurs sont principalement causées par l'environnement dans lequel l'application est en cours d'exécution. Par exemple, OutOfMemoryError se produit lorsque JVM manque de mémoire ou StackOverflowError se produit lorsque des débordements de la pile.

les Exceptions sont principalement causées par l'application elle-même. Par exemple, NullPointerException se produit quand une application tente d'accéder à un objet null ou ClassCastException se produit quand une application tente de lancer des types de classe incompatibles.

Source: Différence Entre Erreur Vs Exception En Java

0
répondu user2485429 2015-04-27 14:10:28