-
Ce qui précède est-il considéré comme une exception vérifiée ? Non Le fait que vous traitiez une exception n'en fait pas pour autant une Checked Exception
s'il s'agit d'un RuntimeException
.
-
Es RuntimeException
un unchecked exception
? Oui
Checked Exceptions
son subclasses
de java.lang.Exception
Unchecked Exceptions
son subclasses
de java.lang.RuntimeException
Les appels lançant des exceptions vérifiées doivent être inclus dans un bloc try{} ou traités à un niveau supérieur dans l'appelant de la méthode. Dans ce cas, la méthode courante doit déclarer qu'elle lève lesdites exceptions afin que les appelants puissent prendre les dispositions appropriées pour gérer l'exception.
J'espère que cela vous aidera.
Q : Dois-je mettre en bulle l'exception exacte exacte ou la masquer en utilisant l'exception ?
R : Oui, c'est une très bonne question et une considération importante pour la conception. La classe Exception est une classe d'exception très générale et peut être utilisée pour envelopper des exceptions internes de bas niveau. Il est préférable de créer une exception personnalisée et de l'intégrer. Mais, et c'est un point important, n'occultez jamais la cause première sous-jacente. Par exemple Don't ever
faire ce qui suit -
try {
attemptLogin(userCredentials);
} catch (SQLException sqle) {
throw new LoginFailureException("Cannot login!!"); //<-- Eat away original root cause, thus obscuring underlying problem.
}
Faites plutôt ce qui suit :
try {
attemptLogin(userCredentials);
} catch (SQLException sqle) {
throw new LoginFailureException(sqle); //<-- Wrap original exception to pass on root cause upstairs!.
}
Le fait de ronger la cause première originale enterre la cause réelle au-delà de toute récupération est un cauchemar pour les équipes de support de production qui n'ont accès qu'aux journaux d'application et aux messages d'erreur. Bien que ces derniers soient mieux conçus, beaucoup de gens ne les utilisent pas souvent car les développeurs ne transmettent pas le message sous-jacent à l'appelant. Alors, prenez-en bonne note : Always pass on the actual exception
de retour, qu'il soit ou non enveloppé dans une exception spécifique à l'application.
Sur le try-catching RuntimeExceptions
RuntimeException
en règle générale, ne doivent pas faire l'objet d'un try-catched. Ils signalent généralement une erreur de programmation et doivent être laissés de côté. Au lieu de cela, le programmeur devrait vérifier la condition d'erreur avant d'invoquer un code qui pourrait résulter en une erreur d'exécution. RuntimeException
. Par exemple :
try {
setStatusMessage("Hello Mr. " + userObject.getName() + ", Welcome to my site!);
} catch (NullPointerException npe) {
sendError("Sorry, your userObject was null. Please contact customer care.");
}
C'est une mauvaise pratique de programmation. Au lieu de cela, un contrôle de nullité aurait dû être effectué comme -
if (userObject != null) {
setStatusMessage("Hello Mr. " + userObject.getName() + ", Welome to my site!);
} else {
sendError("Sorry, your userObject was null. Please contact customer care.");
}
Mais il arrive que la vérification des erreurs soit coûteuse, par exemple pour le formatage des nombres.
try {
String userAge = (String)request.getParameter("age");
userObject.setAge(Integer.parseInt(strUserAge));
} catch (NumberFormatException npe) {
sendError("Sorry, Age is supposed to be an Integer. Please try again.");
}
Dans ce cas, le contrôle d'erreur pré-invocationnel ne vaut pas la peine, car il signifie essentiellement la duplication de tout le code de conversion des chaînes de caractères en nombres entiers dans la méthode parseInt() - et il est sujet à des erreurs s'il est mis en œuvre par un développeur. Il est donc préférable de se passer de try-catch.
Alors NullPointerException
y NumberFormatException
sont tous deux RuntimeExceptions
en attrapant un NullPointerException
devrait être remplacée par une vérification gracieuse de la nullité, tandis que je recommande d'attraper un NumberFormatException
explicitement pour éviter l'introduction éventuelle d'un code sujet à des erreurs.
8 votes
J'ai un excellent exemple d'exception non vérifiée. J'ai un
DataSeries
qui contient des données qui doivent toujours rester dans l'ordre chronologique. Il existe une méthode pour ajouter une nouvelleDataPoint
à l'extrémité d'unDataSeries
. Si l'ensemble de mon code fonctionne correctement tout au long du projet, uneDataPoint
ne doit jamais être ajouté à la fin qui a une date antérieure à celle déjà sur la fin. Chaque module de l'ensemble du projet est construit avec ce truisme. Cependant, je vérifie cette condition et je lève une exception non vérifiée si cela se produit. Pourquoi ? Si cela se produit, je veux savoir qui fait cela et le réparer.3 votes
Pour ajouter encore plus de confusion. De nombreuses personnes préconisaient les exceptions vérifiées il y a 10 ans, mais aujourd'hui, l'opinion se rapproche de plus en plus de l'idée que les exceptions vérifiées sont mauvaises. (Je ne suis cependant pas d'accord sur ce point)
0 votes
Liés : techblog.bozho.net/?p=316
12 votes
Il n'est utile de gérer une exception que lorsque vous avez quelque chose d'utile à faire avec elle, sinon vous devriez laisser l'appelant la gérer. Il n'est généralement pas utile de l'enregistrer et de faire comme si elle ne s'était pas produite. La relancer simplement est inutile. L'inclusion d'une RuntimeException n'est pas aussi utile que certains le pensent, elle oblige simplement le compilateur à ne plus vous aider. (IMHO)
50 votes
Nous devrions cesser d'utiliser les termes globalement trompeurs de vérifié/non vérifié exceptions. Elles doivent être appelées contrôle obligatoire vs contrôle non obligatoire exceptions.
3 votes
J'ai également pensé à votre 5ème point public void method_name throws Exception{} pourquoi certaines personnes font cela ?
0 votes
Un excellent article sur le sujet : weblogs.java.net/blog/carcassi/archive/2009/09/25/
0 votes
FileNotFoundException est une exception vérifiée et non une exception non vérifiée comme vous l'avez mentionné dans Q2 en postant un code
0 votes
C'est dans la documentation java : docs.oracle.com/javase/tutorial/essentiel/exceptions/
0 votes
@BlessedGeek. Je pense que la terminologie exceptions vérifiées/non vérifiées est parfaitement logique. Le compilateur est celui qui vérifie s'il y a une possibilité d'exception.
0 votes
Le lien de Duncan Jones est mort, en voici un qui fonctionne : community.oracle.com/blogs/carcassi/2009/09/25/