Les différences entre erreur et d'exception
Question
Je suis en train d'en savoir plus sur Java de base et les différents types de Throwables, quelqu'un peut me faire savoir les différences entre les exceptions et erreurs?
La solution
Les erreurs ne doivent pas être pris ou manipulés (sauf dans des cas très rares). Les exceptions sont le pain et le beurre de la gestion des exceptions. Javadoc explique bien:
Une erreur est une sous-classe de Throwable qui indique des problèmes graves qu'un application raisonnable ne devrait pas essayer d'attraper. La plupart de ces erreurs sont anormales conditions.
Regardez quelques-unes des sous-classes de Error
, en prenant certains de leurs commentaires JavaDoc:
-
AnnotationFormatError
- Renvoyé lorsque l'analyseur d'annotation tente de lire une annotation à partir d'un fichier de classe et détermine que l'annotation est malformé .
-
AssertionError
- Renvoyé pour indiquer qu'une assertion a échoué .
-
LinkageError
- de LinkageError indiquent Sous-classes qu'une classe a une certaine dépendance à une autre classe; Cependant, cette dernière classe a changé après la façon incompatible compilation de l'ancienne classe. -
VirtualMachineError
- Renvoyé pour indiquer que la machine virtuelle Java est cassé ou est à court de ressources nécessaires pour lui permettre de continuer à fonctionner.
Il y a vraiment trois sous-catégories importantes de Throwable
:
-
Error
- Quelque chose assez grave a mal tourné la plupart des applications devraient planter plutôt que d'essayer de traiter le problème, - Exception non contrôlé (aka
RuntimeException
) - Très souvent, une erreur de programmation comme unNullPointerException
ou un argument illégal. Les applications peuvent parfois gérer ou récupérer de cette catégorieThrowable
-. Ou au moins l'attraper à la méthode derun()
du fil, connectez-vous la plainte, et continuer à exécuter - Exception Vérifié (alias Tout le reste) - Les demandes devraient être en mesure d'attraper et de faire quelque chose de manière significative avec le reste, comme
FileNotFoundException
etTimeoutException
...
Autres conseils
par @ georgios-gousios explique de manière concise les différences entre les erreurs et exceptions en Java.
Les erreurs ont tendance à signaler la fin de votre application comme vous le savez. Il ne peut généralement être récupéré à partir et devrait entraîner votre VM pour quitter. Attrapez-les ne devraient pas se faire, sauf pour éventuellement ouvrir une session ou affichage et message approprié avant de quitter.
Exemple: OutOfMemoryError -. Pas grand-chose que vous pouvez faire en tant que votre programme ne peut fonctionner plus
Les exceptions sont souvent récupérables et même lorsqu'ils ne sont pas, ils signifient généralement juste une opération de tentative a échoué, mais votre programme peut encore continuer.
Exemple: IllegalArgumentException -. Passed des données non valides à une méthode de sorte que l'appel de méthode a échoué, mais elle n'a aucune incidence sur les opérations futures
Ce sont des exemples simplistes, et il y a une autre mine d'informations sur les exceptions légitimes seulement.
Une erreur est une sous-classe de Throwable qui indique des problèmes graves qu'un application raisonnable ne devrait pas essayer pour attraper.
Erreurs -
-
Error
s en java sont de typejava.lang.Error
. - Toutes les erreurs de java sont de type sans contrôle.
-
Error
s se produisent au moment de l'exécution. Ils ne seront pas connus au compilateur. - Il est impossible de récupérer les erreurs.
-
Error
s sont principalement causées par l'environnement dans lequel l'application est en cours d'exécution. - Exemples:
java.lang.StackOverflowError
,java.lang.OutOfMemoryError
-
Exception
s en java sont de typejava.lang.Exception
. -
Exception
s comprennent à la fois vérifié ainsi que le type sans contrôle. - exceptions cochés sont connues compilateur où comme exceptions non vérifiées ne sont pas connues du compilateur parce qu'ils se produisent au moment de l'exécution.
- Vous pouvez récupérer des exceptions en les manipulant par blocs
try-catch
. -
Exception
s sont principalement causées par l'application elle-même. - Exemples: Exceptions cochés:
SQLException
,IOException
Exceptions: UncheckedArrayIndexOutOfBoundException
,ClassCastException
,NullPointerException
en savoir plus: http://javaconceptoftheday.com/difference- entre-error-vs-exception en java /
La description de la classe Error
est tout à fait clair:
Un
Error
est une sous-classe deThrowable
qui indique des problèmes graves qu'un application raisonnable ne devrait pas essayer attraper. La plupart de ces erreurs sont des conditions anormales. leThreadDeath
erreur, si une condition « normale », est aussi une sous-classe deError
parce que la plupart les applications ne devraient pas essayer d'attraper il.Un procédé n'a pas à déclarer la clause jette tous les sous-classes de
Error
qui pourrait être jeté pendant la l'exécution de la méthode, mais pas pris, étant donné que ces erreurs sont des conditions anormales qui ne devraient jamais se produire.
Citée de propres href="http://java.sun.com/javase/6/docs/api/java/lang/Error.html" de la Error
de classe .
En bref, vous ne devriez pas prendre Error
s, sauf que vous avez une bonne raison de le faire. (Par exemple, pour éviter que votre implémentation de serveur Web pour se bloquer si une servlet à court de mémoire ou quelque chose comme ça.)
Un Exception
, d'autre part, est juste une exception normale dans une autre langue moderne. Vous trouverez une description détaillée dans la documentation de l'API Java ou toute autre ressource en ligne ou hors ligne.
Il y a plusieurs similitudes et les différences entre les classes java.lang.Exception
et java.lang.Error
.
Similitudes:
-
Tout d'abord - les deux classes s'étend
java.lang.Throwable
et en conséquence hérite de nombreuses méthodes qui sont communes à utiliser pour traiter avec des erreurs telles que:getMessage
,getStackTrace
, etprintStackTrace
ainsi de suite. -
En second lieu, comme les sous-classes de
java.lang.Throwable
ils héritent les propriétés suivantes:-
throwable lui-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 la méthode utilisant le mot clé dethrows
. Une telle déclaration obligatoire que pourjava.lang.Exception
et sous-classes, pourjava.lang.Throwable
,java.lang.Error
etjava.lang.RuntimeException
et leurs sous-classes est facultative. -
Seuls
java.lang.Throwable
et sous-classes autorisées à utiliser dans la clausecatch
. -
Seuls
java.lang.Throwable
et les sous-classes peuvent être utilisées avec mot-clé -.throw
-
La conclusion de cette propriété suit les deux java.lang.Error
et java.lang.Exception
peuvent être déclarés dans l'en-tête de la méthode, peut être à la clause de catch
, peut être utilisé avec throw
mot-clé.
Différences:
-
Première - différence conceptuelle:
java.lang.Error
conçu pour être lancée par la machine virtuelle Java et indiquer de graves problèmes et destinés à arrêter l'exécution du programme au lieu d'être pris (mais il est possible que pour tout autre successeur dejava.lang.Throwable
).Un passage de javadoc Description A propos de
java.lang.Error
:... indique des problèmes graves qu'une application raisonnable devrait ne pas essayer d'attraper.
En
java.lang.Exception
opposé conçu pour représenter les erreurs prévu et peut être manipulé par un programmeur sans terminer l'exécution du programme.Un passage de javadoc Description A propos de
java.lang.Exception
:... indique les conditions qu'une application raisonnable pourrait vouloir prises.
- La deuxième différence entre
java.lang.Error
etjava.lang.Exception
que la première considérée comme une décochée exception pour la vérification des exceptions à la compilation. Comme le code de résultat lancerjava.lang.Error
ou ses sous-classes ne nécessitent pas de déclarer cette erreur dans l'en-tête de la méthode. Tout en jetantjava.lang.Exception
déclaration requise dans l'en-tête de la méthode.
Throwable et son diagramme de classes successeur (propriétés et méthodes sont omis).
OMI une erreur est quelque chose qui peut causer votre application à l'échec et ne doivent pas être manipulés. Une exception est quelque chose qui peut entraîner des résultats imprévisibles, mais il peut être récupéré.
Exemple:
Si un programme est à court de mémoire, il est une erreur que l'application ne peut pas continuer. Cependant, si un programme accepte un type d'entrée incorrecte, il est une exception que le programme peut gérer et rediriger pour recevoir le type d'entrée correcte.
Voici un assez bon résumé de Java API quelle erreur et d'exception représente:
Une erreur est une sous-classe de Throwable qui indique des problèmes graves qui ne devrait pas essayer une application raisonnable de prendre. La plupart de ces erreurs sont des conditions anormales. L'erreur ThreadDeath, si une condition « normale », est aussi une sous-classe d'erreur, car la plupart des applications ne doivent pas essayer de l'attraper.
Un procédé n'a pas à déclarer la clause jette tous les sous-classes de Erreur qui pourrait être jeté pendant la l'exécution de la méthode, mais pas pris, étant donné que ces erreurs sont des conditions anormales qui ne devraient jamais se produire.
OTOH, pour les exceptions, l'API Java dit:
L'exception de classe et ses sous-classes sont une forme de Throwable qui indique les conditions qu'une application raisonnable pourrait vouloir attraper.
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 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 à l'objet nul ou ClassCastException se produit lorsqu'une application tente de jeter les types de classes incompatibles.