Lance ou try-catch
Ce qui est la règle générale de pouce lorsque vous décidez d'ajouter un throws
clause à une méthode ou à l'aide d'un try-catch
?
De ce que j'ai lu moi-même, le throws
doit être utilisé lorsque l'appelant a brisé leur fin de contrat (objet passé) et le try-catch
doit être utilisée lorsqu'une exception a lieu au cours d'une opération qui est menée à l'intérieur de la méthode. Est-ce correct? Si oui, quel devrait être fait sur les appelants côté?
P. S: une recherche dans Google et DONC, mais je voudrais une réponse claire sur ce point.
- J'ai toujours été un fan de "Si il est logique de traiter avec elle ici...puis le faire" approche.
- J'aime avoir toute ma exceptions traitées où ils se déroulent donc je ne pas avoir à traiter avec le bas de la route.
Vous devez vous connecter pour publier un commentaire.
En général, une méthode doit lever une exception de son interlocuteur quand il ne peut pas gérer le problème localement. E. g. si la méthode est censé lire un fichier avec le chemin d'accès donné,
IOExceptions
ne peuvent pas être traitées localement d'une manière sensible. De même pour la saisie de données incorrectes, ajoutant que mon choix personnel serait de jeter un décoché exception commeIllegalArgumentException
dans ce cas.Et il doit intercepter une exception à partir d'une méthode appelée, si:
DAO
utiliseHibernate
pour la persistance de mes entités, donc j'ai attraper tousHibernateExceptions
localement et de les convertir dans mes propres types d'exception).Mes conditions de la règle de pouce pour que est simple :
try/catch
. Par poignée, je veux dire être capable d'informer l'utilisateur/récupérer de l'erreur ou, dans un sens plus large, être en mesure de comprendre comment cette exception affecte l'exécution de mon code.Remarque : cette des réponses est maintenant une communauté wiki, n'hésitez pas à ajouter plus d'info dans.
Voici la façon dont je l'utilise:
Jette:
une erreur se produit.
les erreurs si certaines conditions préalables sont
pas rencontré.
Try-Catch:
se comportent différemment avec différents
erreurs.
significative erreurs pour les utilisateurs finaux.
Je connais beaucoup de gens qui utilisent des Lancers parce que c'est plus propre, mais il n'est tout simplement pas autant de contrôle.
La décision d'ajouter un try-catch ou un lève la clause de vos méthodes dépend de comment vous voulez (ou ont) pour gérer vos exception".
Comment gérer une exception est un grand et loin d'être trivial de répondre à la question. Elle implique spécialement la décision de l'endroit où la poignée de l'exception et ce que les actions à mettre en œuvre dans le bloc catch. En effet, comment gérer une exception doit être d'une conception globale de décision.
Afin de répondre à vos questions, il n'y a pas de règle générale.
Vous devez décider où vous souhaitez gérer vos exception et que la décision est généralement très spécifique à votre domaine et les exigences de l'application.
Si la méthode où l'exception a obtenu a soulevé une suffisante quantité d'informations à traiter avec elle, alors il doit attraper, de générer des informations utiles à propos de ce qui s'est passé et quelles données sont traitées.
Une méthode ne doit
throws
une exception si elle peut apporter des garanties raisonnables entourant l'état de l'objet, tous les paramètres passés à la méthode, et tous les autres objets de la méthode sur des actes. Par exemple, une méthode qui est censé récupérer à partir d'une collection d'un élément qui l'appelant attend à être contenus pourraientthrows
un checked exception si l'élément qui devrait exister dans la collection, n'est-ce pas. Un appelant qui attrape l'exception devrait s'attendre à ce que la collection ne contient pas l'élément en question.Note que bien que Java va permettre checked exceptions à bulle en haut à travers une méthode qui est déclaré comme étant de lever des exceptions les types appropriés, cette utilisation doit généralement être considéré comme un anti-modèle. Imaginez, par exemple, que certains de la méthode de
LookAtSky()
est déclaré que l'appel à laFullMoonException
, et il est prévu de les jeter quand la Lune est pleine; imaginer d'autres, queLookAtSky()
appelsExamineJupiter()
, qui est également déclarée commethrows FullMoonException
. Si unFullMoonException
ont été jetés parExamineJupiter()
, et siLookAtSky()
n'ai pas l'attraper, et soit de les manipuler ou de les emballer dans un autre type d'exception, le code qui appelleLookAtSky
suppose que l'exception a été une conséquence de la Terre, la lune étant pleine; il n'en avait aucune idée que l'une des lunes de Jupiter pourrait être le coupable.Exceptions qui un appelant peut s'attendre à la poignée (y compris pour l'essentiel, tous checked exceptions) ne devraient être autorisés à s'infiltrer au travers d'une méthode si l'exception est la même chose pour la méthode de l'appelant que cela signifiait pour la méthode appelée. Si le code appelle la méthode qui est déclaré comme étant de jeter quelques vérifié exception, mais l'appel n'est pas l'attend jamais jeter cette exception dans la pratique (par exemple parce qu'il pense qu'il pré-validé arguments de méthode), faisant l'objet d'une exception doit être pris et enveloppé dans certains décoché type d'exception. Si l'appelant ne s'attend pas à l'exception levée, l'appelant ne peut pas s'attendre à avoir une quelconque signification.
Lors de l'utilisation de ce. J'ai beaucoup cherché sur ce sujet.
Il n'y a aucune règle dure et rapide.
"Mais en tant Que développeur, Vérifié les exceptions doivent être inclus dans la clause throws de la méthode. Cela est nécessaire pour que le compilateur de savoir quelles exceptions sont à vérifier.
Par convention, non des exceptions ne doivent pas être inclus dans une clause throws.
Y compris entre eux est considéré de mauvaise programmation de la pratique. Le compilateur traite comme des commentaires, et n'a aucun contrôle sur eux."
Source : SCJP 6 livre de Kathy Sierra
Si vous utilisez un try catch, lorsque l'exception se produit, les autres codes serait encore exécutée.
Si vous indiquez la méthode de jeter l'exception, lorsque l'exception se produit, le code serait cesser d'être exécutée immédiatement.
try-catch paire est utilisé lorsque vous souhaitez fournir de personnaliser le comportement, dans le cas où si une exception se produit.....en d'autres mots...vous avez une solution de votre problème (à l'exception occurrence) selon vos besoins du programme.....
Mais lancers est utilisé lorsque vous n'avez pas de solution spécifique concernant l'occurrence de l'exception de cas...vous ne voulez pas d'obtenir un arrêt anormal de votre programme....
Espère que c'est correct 🙂