Arrêtez de déconner, 10 meilleures pratiques pour gérer les exceptions Java

N'utilisez pas printStackTrace () pour le code en ligne

Après avoir écrit le code, veuillez le vérifier. Ne pas avoir printStackTrace () dans le code. Étant donné que printStackTrace () ne sortira que les mauvaises informations de pile sur la console, il ne convient que pour le débogage de code.

Si vous avez vraiment besoin de consigner les exceptions, veuillez utiliser la journalisation.

 

Ne jamais avaler les exceptions dans les blocs catch

catch (NoSuchMethodException e) {
     return null;
  }

Ne manquez jamais de gérer l'exception, mais retournez null, afin que l'exception soit avalée et qu'aucune information d'échec ne puisse être obtenue, ce qui entraînera de grandes difficultés pour le dépannage futur.

 

Déclarez des exceptions vérifiées spécifiques si nécessaire

 public void foo() throws Exception { //错误做法
  }

Le code ci-dessus doit être évité autant que possible, car son appelant n'a aucune idée de la cause de l'erreur.

Dans la déclaration de méthode, certaines exceptions vérifiées spécifiques peuvent être levées par la méthode. S'il y en a plusieurs, lancez plusieurs séparément, de sorte que l'utilisateur de cette méthode effectue un traitement spécifique pour chaque exception séparément, afin d'éviter l'échec.

public void foo() throws SpecificException1, SpecificException2 { 
//正确做法
}
### 始终只捕获那些可以处理的异常

catch (NoSuchMethodException e) 
{
    throw e; //这代码一点用都没有
}

Il s'agit d'un concept de base. Lorsque vous pouvez le gérer, vous détectez à nouveau l'exception, sinon vous ne devriez jamais l'attraper.

Si vous ne pouvez pas le gérer dans le bloc catch, ne l'attrapez pas en premier, puis lancez-le directement, cela n'a aucun sens.

 

Essayez de capturer des sous-classes spécifiques au lieu de capturer directement la classe Exception

try {
      someMethod();
  } 
  catch (Exception e) 
  {
      LOGGER.error("method has failed", e);
  }

Le plus gros problème avec le code ci-dessus est si le développeur de someMethod () y ajoute une exception spécifique, et on s'attend à ce que l'appelant puisse le gérer spécialement.

Cependant, si l'appelant intercepte directement la classe Exception, il ne connaîtra jamais les modifications spécifiques de someMethod. Cela peut provoquer le blocage du programme à un certain moment du processus en cours d'exécution.

N'attrapez jamais la classe Throwable

C'est un problème sérieux, car Error en Java peut également être une sous-classe de Throwable. Mais Error est hors du contrôle de la machine virtuelle Java elle-même. La machine virtuelle Java peut même ne pas demander la clause catch de l'utilisateur en cas d'erreur.

Remplacez toujours l'exception d'origine dans l'exception personnalisée afin que la trace de la pile ne soit pas perdue

 catch (NoSuchMethodException e) 
  {
  throw new MyServiceException("Some information: " + e.getMessage());  //错误做法
  }

La commande ci-dessus peut perdre la trace de pile de l'exception principale. La bonne manière est:

catch (NoSuchMethodException e) {
     throw new MyServiceException("Some information: " , e);  //正确做法
}

Vous pouvez enregistrer des exceptions ou lever des exceptions, mais ne faites pas les deux

catch (NoSuchMethodException e) {
     LOGGER.error("Some information", e);
     throw e;
  }

Comme indiqué dans le code ci-dessus, le lancement et la journalisation peuvent produire plusieurs messages de journal dans le fichier journal.

Cela entraînera le même problème, mais il existe de nombreux messages d'erreur différents dans le journal, ce qui entraîne la confusion des développeurs.

 

Ne jette jamais une exception enfin

 
try {
  someMethod();  //抛出 exceptionOne
}
 finally
{
  cleanUp();    //如果在这里再抛出一个异常,那么try中的exceptionOne将会丢失forever
}

在上面的例子中,如果someMethod()抛出一个异常,并且在finally块中,cleanUp()也抛出一个异常,那么初始的exceptionOne(正确的错误异常)将永远丢失。

Si vous n'avez pas l'intention de gérer les exceptions, utilisez le bloc finally au lieu du bloc catch

 
try {
  someMethod(); 
} 
finally
{
  cleanUp();    
}

C'est également une bonne pratique. Si vous accédez à d'autres méthodes de votre méthode et que la méthode lève une exception et que vous ne voulez pas vous en occuper, mais que vous devez encore effectuer un travail de nettoyage, nettoyez dans le bloc finally. N'utilisez pas de blocs catch.

 

Je suppose que tu aimes

Origine blog.csdn.net/qq_46388795/article/details/108753859
conseillé
Classement