Comment gérer les exceptions java la bonne façon

Video: JAVA (Intermédiaire) - 19 - Les exceptions en Java

En tant que débutant de programmation, la notion de gestion des exceptions peut être difficile à envelopper autour de votre tête. Non pas que le concept lui-même est difficile, mais la terminologie peut le faire paraître plus avancée qu`elle ne l`est. Et c`est une fonctionnalité puissante qu`elle est sujette à des abus et de mauvais traitements.Comment apprendre la programmation sans tout le stressComment apprendre la programmation sans tout le stressPeut-être que vous avez décidé de poursuivre la programmation, que ce soit pour une carrière ou tout simplement comme un passe-temps. Génial! Mais peut-être vous commencez à se sentir dépassés. Pas si bien. Voici une aide pour faciliter votre voyage.Lire la suite

Dans cet article, vous apprendrez quelles exceptions sont, pourquoi ils sont importants, comment les utiliser et les erreurs courantes à éviter. La plupart des langues modernes ont une sorte de gestion des exceptions, donc si vous jamais passer de Java, vous pouvez prendre la plupart de ces conseils avec vous.

Comprendre les exceptions Java

un en Java, exception est un objet qui indique quelque chose d`anormal (ou « exceptionnel ») a eu lieu pendant l`exécution de votre application. Ces exceptions sont jeté, ce qui signifie essentiellement un objet d`exception est créé (similaire à la façon dont les erreurs sont « élevés »).

La beauté est que vous pouvez capture les exceptions lancées, qui vous permet de faire face à la condition anormale et permettre à votre application de continuer à courir comme si rien a mal tourné. Par exemple, alors qu`un pointeur NULL dans C peut se bloquer votre application, Java vous permet de lancer et attraper NullPointerExceptions avant une variable nulle a une chance de provoquer un accident.

Rappelez-vous, une exception est juste un objet, mais avec une caractéristique importante: il doit être étendu de la Exception classe ou d`une sous-classe de Exception. Alors que Java a toutes sortes d`exceptions intégrées, vous pouvez créer votre propre si vous le souhaitez. Certaines des exceptions Java les plus courantes comprennent:

Video: Java Programming Tutorial - 82 - Exception Handling

  • NullPointerException
  • NumberFormatException
  • Exception d`argument illégal
  • RuntimeException
  • IllegalStateException

Alors qu`est-ce qui se passe quand vous jetez une exception?

Tout d`abord, Java semble dans la méthode immédiate pour voir s`il y a un code qui gère le genre d`exception que vous avez jeté. Si un gestionnaire n`existe pas, il regarde la méthode qui a appelé la méthode actuelle pour voir si une poignée existe là. Sinon, il se penche sur la méthode qui a appelé cette méthode, puis la méthode suivante, etc. Si l`exception n`est pas pris, l`application imprime une trace de la pile et puis se bloque. (En fait, il est plus nuancée que tout simplement s`écraser, mais c`est un sujet avancé au-delà de la portée de cet article.)

UNE trace de la pile est une liste de toutes les méthodes que Java parcourait pour la recherche d`un gestionnaire d`exception. Voici ce qu`une trace de la pile ressemble à:

Exception en fil "principale" Java.lang.NullPointerExceptionat com.Exemple.mon projet.Livre.getTitle(Livre.Java:16)à com.Exemple.mon projet.Auteur.getBookTitles(Auteur.Java:25)à com.Exemple.mon projet.bootstrap.principale(bootstrap.Java:14)

Nous pouvons glaner beaucoup de cette situation. Tout d`abord, l`exception était jeté un NullPointerException. Il a eu lieu dans la getTitle () Procédé selon la ligne 16 de Book.java. Cette méthode a été appelée getBookTitles () à la ligne 25 de Author.java. Cette méthode a été appelée principale() à la ligne 14 de Bootstrap.java. Comme vous pouvez le voir, sachant tout cela rend le débogage plus facile.

Mais encore une fois, le véritable avantage des exceptions est que vous pouvez « gérer » la condition anormale en attrapant l`exception, la mise en choses, et de reprendre l`application sans se briser.

Utilisation de Java exceptions dans le code

Disons que vous avez someMethod () qui prend un entier et exécute une logique qui peut se briser si l`entier est inférieur à 0 ou supérieur à 100. Cela pourrait être un bon endroit pour jeter une exception:

public vide someMethod(int valeur) {si (valeur lt; 0 || valeur gt; 100) {jeter Nouveau Exception d`argument illégal()-}// ...}

Pour attraper cette exception, vous devez aller à l`endroit où someMethod () est appelé et utiliser la try-catch bloc:

public vide callingMethod() {essayer {someMethod(200)-someOtherMethod()-} capture (Exception d`argument illégal e) {// gérer l`exception ici}// ...}

Tout dans le essayer bloc exécutera pour jusqu`à ce qu`une exception est levée. Dès qu`une exception est levée, toutes les déclarations suivantes sont ignorées et la logique de l`application passe immédiatement à la capture bloc.

Dans notre exemple, nous entrons dans le bloc try et appelez immédiatement someMethod (). Depuis 200 n`est pas entre 0 et 100, Exception d`argument illégal est jeté. Cela termine immédiatement someMethod (), Ignore le reste de la logique dans le bloc d`essai (someOtherMethod () est jamais appelé), et reprend l`exécution dans le bloc catch.

Que se passerait-il si nous avons appelé someMethod (50) au lieu? le Exception d`argument illégal ne serait jamais jeté. someMethod () exécuterait normalement. Le bloc try exécuterait normalement, appeler someOtherMethod () quand someMethod () se termine. Quand someOtherMethod () extrémités, le bloc catch serait sautée et callingMethod () continuerait.

Notez que vous pouvez avoir plusieurs blocs catch par bloc try:

public vide callingMethod() {essayer {someMethod(200)-someOtherMethod()-} capture (Exception d`argument illégal e) {// gérer l`exception ici} capture (NullPointerException e) {// gérer l`exception ici}// ...}

Notez également qu`une option enfin bloc existe aussi:

public vide méthode() {essayer {// ...} capture (Exception e) {// ...} enfin {// ...}}

Le code dans un bloc finally est toujours exécuté peu importe. Si vous avez une déclaration de retour dans le bloc try, le bloc finally est exécuté avant de revenir sur la méthode. Si vous jetez une exception dans le bloc catch, le bloc finally est exécuté avant que l`exception est levée.

Video: Gestion des exceptions : introduction

Vous devez utiliser le bloc finally lorsque vous avez des objets qui doivent être nettoyés avant que la méthode se termine. Par exemple, si vous ouvrez un fichier dans le bloc d`essai, puis a lancé une exception, le bloc finally vous permet de fermer le fichier avant de quitter la méthode.

Notez que vous pouvez avoir un bloc finally sans bloc catch:

public vide méthode() {essayer {// ...} enfin {// ...}}

Cela vous permet d`effectuer tout nettoyage nécessaire tout en permettant des exceptions lancées pour propager la pile d`appel de méthode (à savoir que vous ne voulez pas gérer l`exception ici, mais vous avez encore besoin de nettoyer d`abord).

Vérifié par rapport à des exceptions en Java Unchecked

Contrairement à la plupart des langages, Java distingue entre vérifiés exceptions et non vérifiées exceptions (Par exemple C # a seulement exceptions non vérifiées). Une exception vérifiée doit être pris dans la méthode où l`exception est levée ou bien le code ne compilera pas.

Pour créer une exception contrôlée, de prolonger Exception. Pour créer une exception non contrôlée, de prolonger RuntimeException.

Toute méthode qui jette une exception contrôlée doit indiquer cela dans la signature de la méthode en utilisant la lancers francs mot-clé. Depuis intégré Java IOException est une exception vérifiée, le code suivant ne compilera pas:

public vide wontCompile() {// ...si (conditionquelconque) {jeter Nouveau IOException()-}// ...}

Vous devez d`abord déclarer qu`il jette une exception vérifiée:

Video: Tutoriel PHP : Les Exceptions

public vide willCompile() lancers francs IOException {// ...si (conditionquelconque) {jeter Nouveau IOException()-}// ...}

Notez qu`une méthode peut être déclarée comme lancer une exception, mais jamais en fait lancer une exception. Cependant, l`exception aura encore besoin d`être pris ou bien le code ne compilera pas.

Quand utiliser ou vérifié exceptions non vérifiées?

La documentation officielle Java a une page sur cette question. Il résume la différence avec une règle succincte de base: « Si un client peut raisonnablement attendre pour récupérer d`une exception, en font une exception vérifiée. Si un client ne peut rien faire pour se remettre de l`exception, faire une exception non contrôlée « .

Mais cette directive peut être dépassée. D`une part, exceptions vérifiées font suite à un code plus robuste. D`autre part, aucune autre langue a vérifié les exceptions de la même manière que Java, qui montre deux choses: l`une, la fonction ne suffit pas utile pour d`autres langues pour voler, et deux, vous pouvez tout à fait vivre sans eux. De plus, vérifié les exceptions ne jouent pas bien avec les expressions lambda introduites en Java 8.10 conseils pour Cleaner écriture & code de mieux10 conseils pour Cleaner écriture & code de mieuxcode propre écriture semble plus facile que c`est en fait, mais les avantages en valent la peine. Voici comment vous pouvez commencer à écrire un code plus propre aujourd`hui.Lire la suite

Lignes directrices pour les exceptions Java Utilisation

Des exceptions sont utiles mais facilement mal utilisé et abusé. Voici quelques conseils et les meilleures pratiques pour vous aider à éviter de faire un gâchis d`entre eux.

  • Préférez des exceptions spécifiques à des exceptions générales. Utilisation NumberFormatException plus de Exception d`argument illégal lorsque cela est possible, utiliser autrement Exception d`argument illégal plus de RuntimeException quand c`est possible.
  • ne jamais attraper throwable! le Exception classe étend effectivement throwable, et le bloc de capture fonctionne réellement avec throwable ou toute classe qui étend Throwable. Cependant, le Erreur classe étend également throwable, et vous ne voudrez plus jamais attraper un Erreur car Erreurs indiquent de graves problèmes irrécupérables.
  • ne jamais attraper Exception! InterruptedException étend Exception, de sorte que tout bloc qui attire Exception également attraper InterruptedException, et c`est une exception très importante que vous ne voulez pas salir avec (en particulier dans les applications multi-thread), sauf si vous savez ce que vous faites. Si vous ne savez pas quelle exception à attraper lieu, envisager de ne pas attraper quoi que ce soit.
  • Utiliser des messages descriptifs pour faciliter le débogage. Quand vous jetez une exception, vous pouvez fournir un Chaîne message comme un argument. Ce message peut être consulté dans le bloc catch en utilisant la Exception.getMessage () méthode, mais si l`exception est jamais pris, le message apparaîtra également dans le cadre de la trace de la pile.
  • Essayez de ne pas prendre et ne pas tenir compte des exceptions. Pour contourner l`inconvénient des exceptions vérifiées, beaucoup de débutants et les programmeurs paresseux va mettre en place un bloc catch, mais le laisser vide. Mal! Prenez toujours gracieusement, mais si vous ne pouvez pas, à tout le moins imprimer une trace de la pile de sorte que vous savez a jeté l`exception. Vous pouvez le faire en utilisant la Exception.printStackTrace () méthode.
  • Méfiez-vous des exceptions surutilisation. Lorsque vous avez un marteau, tout ressemble à un clou. Lorsque vous apprenez sur les exceptions, vous pouvez vous sentir obligé de tout transformer en une exception ... au point où la plupart des flux de contrôle de votre application se résume à la gestion des exceptions. Rappelez-vous, des exceptions sont destinés à des événements « exceptionnels »!

Maintenant, vous devriez être assez à l`aise avec des exceptions pour comprendre ce qu`ils sont, pourquoi ils sont utilisés, et comment les intégrer dans votre propre code. Si vous ne comprenez pas le concept, c`est correct! Il m`a fallu un certain temps pour qu`il « clic » dans ma tête, donc ne se sentent pas comme vous avez besoin de se précipiter. Prends ton temps.6 signes que vous n`êtes pas censé être un programmeur6 signes que vous n`êtes pas censé être un programmeurPas tout le monde est découpé pour être un programmeur. Si vous n`êtes pas complètement sûr que vous êtes censé être un programmeur, voici quelques signes qui peuvent vous pointer dans la bonne direction.Lire la suite

Vous avez des questions? Connaître d`autres conseils liés exception, que je manqué? Partagez-les dans les commentaires ci-dessous!

Articles connexes