Question

API doc dit jamais attraper Throwable sous-classe Erreur qui signifie un comportement anormal. Est-ce que cela implique que la séparation entre l'erreur et l'exception est de dire aux programmeurs ce que la sous-classe doit être pris et qui ne devrait pas? Ou il y a de plus?

Était-ce utile?

La solution

En général, Error est quelque chose de grave (souvent au sein de la plate-forme elle-même ) que vous qu'elles ne peuvent pas gérer. Les seules fois où j'ai jamais pris soin d'attraper Error est pour log it , après quoi je puis re-lancer.

Ceci est extrêmement important car il est facile de laisser des erreurs (et les exceptions d'exécution) se propagent jusqu'à la pile d'appels de telle sorte qu'ils ne sont jamais enregistrés (par exemple à l'aide executorService.submit(Runnable) sans écouter le Future retour)

Errors sont généralement des choses comme:

  • de mémoire
  • erreur de méthode abstraite (par exemple en cours d'exécution contre différentes versions des bibliothèques à celles construites contre)
  • Assertions (à savoir le programmeur défini invariants , ou des choses qui ne devraient jamais se produire - lol!)

Je voudrais donc dire que RuntimeExceptions sont généralement (mais pas toujours) une indication de programmation erreurs:

  • pour ne pas vérifier nulle ou en passant nulle
  • passant arguments non valides, ou en permettant état non valide
  • modifier une collection que vous itérez dessus

Je recommande généralement ne pas rapide sur ces derniers aussi bien, mais c'est une zone grise; peut-être vous ne cochez pas l'entrée d'utilisateur avant de le transmettre au serveur -hardly vaut plantage de votre application sur!

cochés Exceptions (à savoir non-exécution) doivent être utilisés pour des choses que vous pouvez raisonnablement espérer arriver et raisonnablement (ou peut-) gérer dans votre code. Personnellement, j'aime vérifié des exceptions, mais ceux-ci sont rendus encombrants en raison de la verbosité / répétition impliqués dans le traitement des différents types d'exception de la même manière (par exemple dans plusieurs blocs catch identiques). Langues telles que Scala ont beaucoup mieux la syntaxe de capture, mais ils ont enlevé le concept de coché exceptions aussi bien!

Autres conseils

Oui, je pense que votre analyse est juste ici - vous n'êtes pas censé attraper Errors parce qu'ils représentent des erreurs d'exécution qui ne peuvent pas être ignorées, comme OutOfMemoryError.

La seule raison pour attraper Throwable est si vous exécutez le code tiers externe qui est pas nécessaire pour le bon fonctionnement de votre programme - si vous ne faites pas confiance que le code, attraper tout et si vous obtenez des choses que vous didn « attendez pas (Throwable) puis désactivez ce code et le signaler.

Il pourrait aussi être une bonne idée de faire la distinction entre Exception et RuntimeException.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top