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?
10 réponses
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'uneNullPointerException
ou un argument illégal. Les Applications peuvent parfois traiter ou récupérer de cette catégorieThrowable
-- ou au moins l'attraper à la méthoderun()
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
etTimeoutException
...
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.
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 Exceptionssont 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.
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.
Erreurs -
-
Error
s en java sont de typejava.lang.Error
. - toutes les erreurs en java sont de type non vérifié.
-
Error
s se produisent au moment de l'exécution. Ils ne seront pas connues de compilateur. - il est impossible de récupérer des erreurs.
-
Error
s sont principalement causées par le 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 comprend à la fois le type vérifié et le type non vérifié. - 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.
- vous pouvez récupérer des exceptions en les manipulant à travers les blocs
try-catch
. -
Exception
s sont principalement causées par l'application elle-même. - 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 /
la description de la classe Error
est très claire:
un
Error
est une sous-classe deThrowable
cela indique de graves problèmes qu'un application raisonnable ne devrait pas essayer attraper. La plupart de ces erreurs sont conditions anormales. LeThreadDeath
erreur, Bien qu'une condition" normale", est également une sous-classe deError
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.
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 pourjava.lang.Exception
et les sous-classes, pourjava.lang.Throwable
,java.lang.Error
etjava.lang.RuntimeException
et leurs sous-classes elle est facultative. -
seulement
java.lang.Throwable
et sous-classes autorisées dans la clausecatch
. -
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 autrejava.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
etjava.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 codejava.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çantjava.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).
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.
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.
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.