J'essaie d'en savoir plus sur Java de base et les différents types de Throwables, quelqu'un peut-il me faire savoir les différences entre les exceptions et les erreurs?
173
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 gestion des exceptions. Le Javadoc l' explique bien:
Une erreur est une sous-classe de Throwable qui indique des problèmes graves qu'une application raisonnable ne devrait pas essayer d'attraper. La plupart de ces erreurs sont des conditions anormales.
Regardez quelques-unes des sous-classes de Error
, en 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 malformée.AssertionError
- Lancé pour indiquer qu'une assertion a échoué.LinkageError
- Les sous-classes de LinkageError indiquent qu'une classe a une certaine dépendance à une autre classe; cependant, la dernière classe a changé de manière incompatiblable après la compilation de la première classe.VirtualMachineError
- Lancé pour indiquer que la machine virtuelle Java est cassée ou n'a plus les ressources nécessaires pour continuer à fonctionner. Il existe en réalité 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 de gérer le problème,RuntimeException
) - Très souvent une erreur de programmation telle qu'un NullPointerException
argument ou un argument illégal. Les applications peuvent parfois gérer ou récupérer de cette Throwable
catégorie - ou au moins l'attraper à la run()
méthode de Thread , enregistrer la plainte et continuer à fonctionner.FileNotFoundException
et TimeoutException
...
Unchecked exceptions != RuntimeExceptions
;Unchecked exceptions = RuntimeExceptions + Errors
. Je sais que cela soulève la question: l' erreur est-elle une exception? , mais c'est ce qu'ils écrivent. Voici juste un de ces exemples: docs.oracle.com/javase/tutorial/essential/exceptions/… .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.
la source
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 entraîner la fermeture de votre machine virtuelle. Les attraper ne doit pas être fait sauf pour éventuellement enregistrer ou afficher un message approprié avant de quitter.
Exemple: OutOfMemoryError - Vous ne pouvez pas faire grand-chose car votre programme ne peut plus s'exécuter.
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: IllegalArgumentException - Des données non valides ont été transmises à une méthode afin que l'appel de méthode échoue, mais cela n'affecte pas les opérations futures.
Ce sont des exemples simplistes, et il existe une autre mine d'informations sur les seules exceptions.
la source
Erreurs -
Error
Les s en java sont de typejava.lang.Error
.Error
s se produisent au moment de l'exécution. Ils ne seront pas connus du compilateur.Error
Les s sont principalement causés par l'environnement dans lequel l'application s'exécute.java.lang.StackOverflowError
,java.lang.OutOfMemoryError
Exceptions -
Exception
s en java sont de typejava.lang.Exception
.Exception
s incluent à la fois le type coché et non coché.try-catch
blocs.Exception
s sont principalement causés par l'application elle-même.SQLException
,IOException
exceptions non vérifiées:
ArrayIndexOutOfBoundException
,ClassCastException
,NullPointerException
lecture supplémentaire: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/
la source
Sun le dit le mieux :
la source
La description de la
Error
classe est assez claire:Cité à partir de la propre documentation Java 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êcher votre implémentation de serveur Web de planter si un servlet manque de mémoire ou quelque chose du genre.)An
Exception
, d'autre part, n'est qu'une exception normale comme dans n'importe quelle 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.la source
Il existe plusieurs similitudes et différences entre les classes
java.lang.Exception
etjava.lang.Error
.Similitudes:
Tout d' abord - les deux classes s'étend
java.lang.Throwable
et par conséquent beaucoup hérite des méthodes qui sont communes à utiliser lors de la gestion d'erreurs telles que:getMessage
,getStackTrace
,printStackTrace
et ainsi de suite.Deuxièmement, en tant que sous-classes,
java.lang.Throwable
ils héritent tous les deux des propriétés suivantes:Throwable lui-même et n'importe laquelle de ses sous-classes (y compris
java.lang.Error
) peuvent être déclarées dans la liste des exceptions de méthode à l'aide duthrows
mot clé. Une telle déclaration exigée que pourjava.lang.Exception
et sous - classes, pourjava.lang.Throwable
,java.lang.Error
etjava.lang.RuntimeException
et leurs sous - classes est facultative.Seules les
java.lang.Throwable
sous-classes et les sous-classes peuvent être utilisées dans lacatch
clause.Seules les
java.lang.Throwable
classes et les sous-classes peuvent être utilisées avec le mot-clé -throw
.La conclusion de cette propriété suit les deux
java.lang.Error
etjava.lang.Exception
peut être déclarée dans l'en-tête de la méthode, peut être dans unecatch
clause, peut être utilisée avec un mot-cléthrow
.Différences:
Première - différence conceptuelle:
java.lang.Error
conçue pour être lancée par la JVM et indiquer des problèmes graves et destinée à arrêter l'exécution du programme au lieu d'être interceptée (mais c'est possible comme pour tout autrejava.lang.Throwable
successeur).Un passage de la description javadoc sur
java.lang.Error
:En revanche,
java.lang.Exception
conçu pour représenter les erreurs attendues et pouvant être gérées par un programmeur sans arrêter l'exécution du programme.Un passage de la description javadoc sur
java.lang.Exception
:java.lang.Error
etjava.lang.Exception
ce premier considéré comme une exception non vérifiée pour la vérification des exceptions à la compilation. Comme le code de résultatjava.lang.Error
ou ses sous-classes n'ont pas besoin de déclarer cette erreur dans l'en-tête de la méthode. En lançant lajava.lang.Exception
déclaration requise 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).
la source
Une erreur IMO est quelque chose qui peut entraîner l'échec de votre application et ne doit pas être gérée. Une exception est quelque chose qui peut entraîner des résultats imprévisibles, mais qui peut être récupéré.
Exemple:
Si un programme manque de mémoire, il s'agit d'une erreur car l'application ne peut pas continuer. Cependant, si un programme accepte un type d'entrée incorrect, il s'agit d'une exception car le programme peut le gérer et le rediriger pour recevoir le type d'entrée correct.
la source
Les erreurs sont principalement causées par l'environnement dans lequel l'application s'exécute. Par exemple, OutOfMemoryError se produit lorsque JVM manque de mémoire ou StackOverflowError se produit lorsque la pile déborde.
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 objet nul ou ClassCastException se produit lorsqu'une application tente de convertir des types de classe incompatibles.
Source: différence entre l'erreur et l'exception en Java
la source
Voici un assez bon résumé de l'API Java ce que représentent une erreur et une exception:
OTOH, pour les exceptions, l'API Java dit:
la source
Les erreurs sont causées par l'environnement dans lequel votre application ou programme s'exécute. La plupart du temps, vous risquez de ne pas en récupérer car cela met fin à votre application ou programme. Javadoc a conseillé de ne pas prendre la peine d'attraper de telles erreurs puisque l'environnement, par exemple, JVM, sur de telles erreurs, va de toute façon se fermer.
Exemples:
VirtualMachineError
- Lancé pour indiquer que la machine virtuelle Java est défectueuse ou n'a plus les ressources nécessaires à son fonctionnement.OutOfMemoryError
se produit lorsque la JVM manque de mémoire ouStackOverflowError
lorsque la pile se termine.Les exceptions sont causées par votre application ou programme lui-même; peut-être en raison de votre propre erreur. La plupart du temps, vous pouvez en récupérer et votre application continuera à s'exécuter. Il est conseillé de détecter de telles erreurs pour éviter une interruption anormale de votre application ou programme et / ou pour pouvoir personnaliser le message d'exception afin que les utilisateurs voient un message bien formaté au lieu des messages d'exception laids par défaut dispersés partout.
Exemples:
NullPointerException
se produit lorsqu'une application tente d'accéder à un objet nul. ou Tentative d'accès à un tableau avec un index inexistant ou appel d'une fonction avec des données ou des paramètres incorrects.la source