La doc de l'API indique ne jamais attraper Throwable sous-classe Erreur qui indique un comportement anormal. Cela implique-t-il que la séparation entre Error et Exception consiste à dire aux programmeurs quelle sous-classe doit être détectée et laquelle ne devrait pas l'être? Ou y a-t-il plus?Quelle sous-classe de Throwable devrait être attrapée et laquelle ne devrait pas l'être?
Répondre
En général, Error
est quelque chose de grave (souvent dans la plate-forme elle-même) que vous ne pouviez pas gérer. Les seules fois où je me suis soucié d'attraper Error
est de log il, après quoi je relancer.
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 retour Future
)
Error
s 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 (c.-à-d. programmeur défini invariants, ou des choses qui ne devraient jamais se produire - lol)
Je dirait alors que RuntimeException
s sont généralement (mais pas toujours) indiquant erreurs de programmation:
- ! pas de vérification de la valeur null ou de la valeur null
- en passant des arguments non valides ou en autorisant l'état non valide
- modifier une collection en cours d'itérer
Je recommanderais d'habitude échouer-rapide sur ceux-ci aussi mais c'est une zone grise; peut-être que vous ne vérifiez pas l'entrée de l'utilisateur avant de la transmettre au serveur, ce qui ne vaut pas la peine d'écraser votre application!
Vérifié Exception
s (c'est-à-dire non-runtime) doit être utilisé pour les éléments que vous pourriez raisonnablement espérer voir se produire et raisonnablement (ou éventuellement) gérer dans votre code. Personnellement, j'aime les exceptions vérifiées, mais celles-ci sont lourdes à cause de la verbosité/répétition impliquée dans le traitement de types d'exceptions distincts de la même manière (c'est-à-dire dans plusieurs blocs catch identiques).Des langages tels que Scala ont une meilleure syntaxe de capture, mais ils ont également supprimé le concept des exceptions cochées!
Oui, je pense que votre analyse est correcte ici - vous n'êtes pas censé attraper Error
s parce qu'ils représentent des erreurs d'exécution qui ne peuvent pas être récupérées, comme OutOfMemoryError
. La seule raison pour attraper Throwable
est si vous exécutez le code tiers externe qui n'est pas nécessaire pour le bon fonctionnement de votre programme - si vous ne faites pas confiance à ce code, attrapez tout et si vous obtenez des choses que vous ne m'attendais pas (Throwable
) puis désactiver ce code et le signaler.
Aussi, il pourrait être une bonne idée de faire la distinction entre Exception
et RuntimeException
.
- 1. quelle devrait être la requête pour cela?
- 2. JQuery - object.id est indéfini quand il ne devrait pas être
- 3. marge/Rembourrage où il ne devrait pas être
- 4. Ne devrait pas être ces avertissements avec g ++ -Wall?
- 5. Dans quels cas la superclasse ne devrait pas être abstraite?
- 6. problème nextSibling, devrait être simple
- 7. quelle devrait être ma taille de base de données initiale
- 8. Quelle devrait être la description de cette méthode?
- 9. Quelle devrait être l'architecture du site Web de réseautage social?
- 10. Quelle devrait être la bonne syntaxe javascript dans ce cas?
- 11. Quelle couche devrait être responsable du chargement des plugins?
- 12. quelle méthode devrait-on utiliser?
- 13. ASP.NET MVC: Quelle bêtise devrait être ma vue?
- 14. Quel devrait être mon backend?
- 15. Quelle devrait être la raison derrière cette ligne qui fuit?
- 16. Quelle devrait être la taille d'un SWF Flex?
- 17. Quelle devrait être la clé google map api?
- 18. Quelle devrait être la granularité des modules dans Prism?
- 19. C#: Quelle devrait être l'expression régulière pour cela?
- 20. Quelle bibliothèque devrait être incluse pour utiliser TransparentBlt?
- 21. lorsque CreateDirectory renvoie ERROR_ACCESS_DENIED et "ne devrait pas"
- 22. Quelle méthode devrait être utilisée idéalement - document.getElementById ou document.forms []?
- 23. Quelle devrait être l'accessibilité des champs dans une classe abstraite?
- 24. htaccess ne fonctionne pas comme il devrait
- 25. devrait rediriger vers ne pas fonctionner
- 26. Comment cela devrait-il être conçu?
- 27. Vérification du caractère de départ devrait être « T » et suivant 3 caractère devrait être le numéro dans xslt
- 28. Comment tester un code qui ne devrait jamais être exécuté?
- 29. Est-ce que `System.IO.Path` devrait être concret?
- 30. concombre: pas non défini, bien que l'étape devrait être définie
Aimé l'idée de code de tiers. Je vous remercie –