46 votes

Ce sont les plus couramment utilisés exécution des exceptions en java?

En tant que programmeur java qui souhaite parfaire ses compétences en programmation, j'ai souvent rencontré des situations que j'ai à créer une exception d'exécution. Je sais que c'est une bonne pratique si on utilise à bon escient.

Personnellement, NullPointerException et IllegalStateException sont les plus couramment utilisés dans les logiciels que j'ai créé. Que diriez-vous?

Ce que des exceptions d'exécution utilisez-vous souvent? Dans quelles situations avez-vous les utiliser?

68voto

KLE Points 11711

Je n'ai jamais jeter NullPointerException. Pour moi, c'est celui qui apparaît naturellement dans le code quand quelque chose va mal, et qui nécessite un développeur de regarder ce qui se passe. Ensuite (s), il résout la cause et ça ne se reproduise pas.

J'utilise IllegalStateException pour signaler qu'un objet n'est pas correctement configuré ou que les appels sont dans un ordre incorrect. Cependant, nous savons tous que, dans l'idéal, un objet doit s'assurer qu'il ne peut pas être dans un mauvais état et que vous ne pouvez pas l'appeler dans un ordre incorrect (faire d'un constructeur et d'un objet ...).

J'utilise beaucoup de IllegalArgumentException lorsqu'une méthode détecte que ses paramètres sont incorrects. C'est la responsabilité d'une méthode publique, l'arrêt du traitement (pour éviter indirects erreurs qui sont plus difficiles à comprendre). Aussi, quelques ifs dans le début d'une méthode servir un but de la documentation (documentation de ne jamais s'écarter de la code parce que c'est le code :-) ).

     public void myMethod(String message, Long id) {
       if (message == null) {
          throw new IllegalArgumentException("myMethod's message can't be null");
          // The message doesn't log the argument because we know its value, it is null.
       }
       if (id == null) {
          throw new IllegalArgumentException("myMethod's id can't be null");
          // This case is separated from the previous one for two reasons :
          // 1. to output a precise message
          // 2. to document clearly in the code the requirements
       }
       if (message.length()<12) {
          throw new IllegalArgumentException("myMethod's message is too small, was '" + message + "'");
          // here, we need to output the message itself, 
          // because it is a useful debug information.
       }
     }

J'ai aussi l'utilisation spécifique des Exceptions d'Exécution de signal de niveau supérieur des conditions exceptionnelles.

Par exemple, si un module de mon application n'a pas pu démarrer, je pourrais avoir un ModuleNotOperationalException jeté (idéalement par un code générique comme un intercepteur, sinon par un code spécifique) si un autre module qu'il appelle. Après que la décision architecturale, chaque module doit composer avec cette exception sur les opérations qui en appel d'autres modules...

12voto

Andrzej Doyle Points 52541

J'ai toujours considéré que l'exécution des exceptions doivent représenter des erreurs de programmation (par exemple, null référence transmise dans lorsqu'il n'est pas prévu, tableau d'index out of bounds, etc.) alors que checked exceptions doivent représenter des conditions exceptionnelles dans l'environnement qui ne peut pas être "codé à l'écart" (par exemple, IOException, SQLException).

Une violation de cette est que, parfois, vous aurez besoin d'envelopper de ce que devrait être un checked exception dans une RuntimeException, afin de répondre à la définition d'une interface. Comme un exemple, vous pourriez avoir un certain chic de mise en œuvre de l' java.util.List qui gère un système distribué liste entre plusieurs machines. Clairement, ce serait jeter checked exceptions (probablement une sous-classe de la IOException) si elle est définie sur son propre, mais les avantages de cette classe implémente List , c'est que les clients peuvent utiliser presque de manière transparente, n'importe où ils utilisent une autre liste.

Cela peut conduire à ce que Joel termes d'une abstraction qui fuit, même si, il est donc important que votre documentation est clair que des exceptions peuvent être lancées et ce qu'ils signifient! Dans ce cas, je trouve une sous-classe personnalisée d' RuntimeException à être généralement plus claire à la communication de la cause à la racine plutôt que d'essayer de chausse-pied dans un temps d'exécution existants de classe d'exception.

3voto

NawaMan Points 10266

J'utilise IllegalArgumentException relativement souvent. La plupart du temps, je vais essayer de retourner la valeur par défaut dès que c'est logique, mais de temps en temps, il n'était pas, et donc j'utilise celui-ci.

Un autre que j'utilise est ArrayIndexOutOfBoundsException.

3voto

IAdapter Points 15876

UnknownException, très utile :P

j'aime aussi org.apache.commons.lang.NotImplementedException

2voto

Shruti Rawat Points 132

Surtout, je ne lance pas d'exception d'exécution. Plutôt que d'après vérification des conditions spécifiques jeter des exceptions définies par l'utilisateur. Mais le peu que j'ai utilisé sont - IllegalAccessException , ArithmeticException, NumberFormatException et SecurityException.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X