Il est difficile de proposer des conseils sur la manière de traiter les exceptions sans rentrer dans les particularités et ton tutoriel aura besoin d'une mise à jour à la sortie de Java 1.7 à cause de la nouvelle clause "try with resource". Je vois mal comment on peut traiter cela tout en restant assez général. Beaucoup de débutants posent des questions très bêtes sur les exceptions ici souvent soit parce qu'ils n'ont même pas regardé la documentation de la classe de l'exception soit parce qu'ils ne comprennent pas l'anglais. Fournir des tutoriels en français est une bonne chose mais il ne faut pas laisser entendre qu'on peut s'en sortir sans une maîtrise minimale de l'anglais technique ni farfouiller dans l'excellente documentation en ligne. Bon courage.
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 20 juil. 2011 à 13:41
Bonjour,
Ce tutoriel ne parle pas du finally, c'est vrai mais il ne parle pas non plus du try et du catch. Il est destiné à traiter les erreurs de codage du développeur et ne donne pas de solution pour gérer les exceptions dans le code.
Vu les commentaires sur ce tutoriel, il n'est pas bon, j'accepte vos remarques et je vais essayer d'en proposer une version différente.
En fait, même pour les exceptions de type NullPointerException, je ne suis pas d'accord, tester si c'est null ne suffit pas, il faut au moins mettre un message dans les logs si une méthode ne devrait pas être appelée avec un paramètre à null voire lancer une exception plus explicite encapsulant l'exception en question du genre throw new IllegalStateException("le prénom ne devrait jamais être à null",npe). C'est vrai pour les exceptions en général. Il faut choisir dans quelle couche on l'attrape et dans quelle couche on offre un traitement adapté.
Le tutoriel ne parle pas du tout du "finally".
Je pense que les débutants devraient surtout avoir le réflexe de lire la documentation Java.
Le dernier paragraphe sur OutOfMemoryError traite de la mémoire de manière très très superficielle, le conseil donné ne résoudra pas le problème si une augmentation de la mémoire non paginée aurait été plus adéquate et s'il n'est pas possible d'augmenter la taille passée à -Xmx de telle sorte que cette mémoire en accès direct soit suffisante.
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 18 juil. 2011 à 20:42
Bonjour et merci pour vos remarques.
Vous avez raison, les exceptions ne sont pas forcément à éviter. Le but de ce tutoriel n'est pas d'apprendre comment gérer les exceptions mais permet de comprendre ce qui a mal été fait lorsque l'exception est levée lors de la phase de développement et est dû à une erreur du programmeur.
L'idée de faire ce tutoriel m'est venue en voyant que le forum était truffé de questions concernant les exceptions et leur signification.
Je vais essayer de tenir compte de vos remarques et je posterai avant la fin de la semaine une nouvelle version de ce tutoriel.
N'hésitez pas à ajouter des choses si vous avez d'autres idées.
Isammoc
Messages postés39Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention 5 septembre 2015 18 juil. 2011 à 19:32
Au vu du titre, j'aurais cru à des exemples sur la façon d'agir lors de la levée d'exception et comment s'en charger.
Dans les cas des NullPointerException (et la plupart des Exceptions courantes), tester soi-même la nullité possible des arguments pour les lever avant le reste de la méthode (pour ne pas être dans un état instable).
Avec la bonne pratique de ne JAMAIS ignorer une exception :
- Soit réellement avoir quelque chose à faire dans le catch
- De la laisser passer au-dessus avec le marqueur "throws" de la méthode et en commentant correctement les cas en questions.
- D'encapsuler l'Exception "catchée" par une Exception personnalisée.
Ainsi que la bonne pratique d'englober la tâche entière dans la gestion dans le bloc try/catch.
djo0012
Messages postés4Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention18 juillet 2011 18 juil. 2011 à 04:59
a l'auteur, le commentaire qui suit ne vise pas a dénigré le tutoriel, mais a le complété de certaine information utile et ne tien qu'a mon propre avis, je ne me considère pas comme un professionnel java.
A tous:
les résolution donné ne permette pas de récupéré d'un exception mais seulement d'évité 'simplement' que l'Exception ne puisse arrivé ce qui n'est pas l'objectif des exception:
nullPointerException: généralement il y a un problème de logique derrière un null pointer qu'il ne faut masqué par un if(param!=null) exemple parfait que tu nous donne, si l'utilisateur veut changé sont mots de passe il ne faut _surtout_ pas silencieusement ne pas le changé parce que notre code n'a pas transmis le User
ClassNotFoundException, NoClassDefFoundException: il n'y a jamais d'Exception levé a la compilation par contre ClassNotFoundException peut effectivement être jeté lors de l'utilisation de JDBC pour un débutant sinon par utilisation de la réflexion par un utilisateur plus avancé, le problème peut effectivement provenir du classPath,mais vérifier aussi d'avoir écrit _exactement_ la bonne String dans le Class.forName
OutOfMemoryError: les exemple par rapport a la récursivité peuvent aussi causé un exception StackOverflow, de la meme manière sois il s'agit d'un problème avec le code (récursion infini) sois l'algorithme a réellement besoin d'une trop grande récursion auquel cas il vaut mieux le transformé de manière itérative, il sera aussi plus rapide si bien implémenté
20 juil. 2011 à 17:13
20 juil. 2011 à 13:41
Ce tutoriel ne parle pas du finally, c'est vrai mais il ne parle pas non plus du try et du catch. Il est destiné à traiter les erreurs de codage du développeur et ne donne pas de solution pour gérer les exceptions dans le code.
Vu les commentaires sur ce tutoriel, il n'est pas bon, j'accepte vos remarques et je vais essayer d'en proposer une version différente.
20 juil. 2011 à 12:58
En fait, même pour les exceptions de type NullPointerException, je ne suis pas d'accord, tester si c'est null ne suffit pas, il faut au moins mettre un message dans les logs si une méthode ne devrait pas être appelée avec un paramètre à null voire lancer une exception plus explicite encapsulant l'exception en question du genre throw new IllegalStateException("le prénom ne devrait jamais être à null",npe). C'est vrai pour les exceptions en général. Il faut choisir dans quelle couche on l'attrape et dans quelle couche on offre un traitement adapté.
Le tutoriel ne parle pas du tout du "finally".
Je pense que les débutants devraient surtout avoir le réflexe de lire la documentation Java.
Le dernier paragraphe sur OutOfMemoryError traite de la mémoire de manière très très superficielle, le conseil donné ne résoudra pas le problème si une augmentation de la mémoire non paginée aurait été plus adéquate et s'il n'est pas possible d'augmenter la taille passée à -Xmx de telle sorte que cette mémoire en accès direct soit suffisante.
18 juil. 2011 à 20:42
Vous avez raison, les exceptions ne sont pas forcément à éviter. Le but de ce tutoriel n'est pas d'apprendre comment gérer les exceptions mais permet de comprendre ce qui a mal été fait lorsque l'exception est levée lors de la phase de développement et est dû à une erreur du programmeur.
L'idée de faire ce tutoriel m'est venue en voyant que le forum était truffé de questions concernant les exceptions et leur signification.
Je vais essayer de tenir compte de vos remarques et je posterai avant la fin de la semaine une nouvelle version de ce tutoriel.
N'hésitez pas à ajouter des choses si vous avez d'autres idées.
18 juil. 2011 à 19:32
Dans les cas des NullPointerException (et la plupart des Exceptions courantes), tester soi-même la nullité possible des arguments pour les lever avant le reste de la méthode (pour ne pas être dans un état instable).
Avec la bonne pratique de ne JAMAIS ignorer une exception :
- Soit réellement avoir quelque chose à faire dans le catch
- De la laisser passer au-dessus avec le marqueur "throws" de la méthode et en commentant correctement les cas en questions.
- D'encapsuler l'Exception "catchée" par une Exception personnalisée.
Ainsi que la bonne pratique d'englober la tâche entière dans la gestion dans le bloc try/catch.
18 juil. 2011 à 04:59
A tous:
les résolution donné ne permette pas de récupéré d'un exception mais seulement d'évité 'simplement' que l'Exception ne puisse arrivé ce qui n'est pas l'objectif des exception:
nullPointerException: généralement il y a un problème de logique derrière un null pointer qu'il ne faut masqué par un if(param!=null) exemple parfait que tu nous donne, si l'utilisateur veut changé sont mots de passe il ne faut _surtout_ pas silencieusement ne pas le changé parce que notre code n'a pas transmis le User
ClassNotFoundException, NoClassDefFoundException: il n'y a jamais d'Exception levé a la compilation par contre ClassNotFoundException peut effectivement être jeté lors de l'utilisation de JDBC pour un débutant sinon par utilisation de la réflexion par un utilisateur plus avancé, le problème peut effectivement provenir du classPath,mais vérifier aussi d'avoir écrit _exactement_ la bonne String dans le Class.forName
OutOfMemoryError: les exemple par rapport a la récursivité peuvent aussi causé un exception StackOverflow, de la meme manière sois il s'agit d'un problème avec le code (récursion infini) sois l'algorithme a réellement besoin d'une trop grande récursion auquel cas il vaut mieux le transformé de manière itérative, il sera aussi plus rapide si bien implémenté