Veuillez expliquer RuntimeException en Java et où il doit être utilisé
Je suis ce grand débat, DONC, intitulée: Le cas contre checked exceptions , mais je suis incapable de les suivre exactement où RuntimeException doit être utilisé et comment il est différent de la normale Exceptions et de ses sous-classes. Une recherche sur google m'a donné une réponse complexe, qui est, il devrait être utilisée pour traiter de la logique de programmation d'erreurs et doit être levée lorsque aucune Exception ne devrait normalement se produire, comme dans le bloc par défaut de cas de commutateur de construire.
Pouvez-vous nous expliquer RuntimeException ici plus en détail. Merci.
OriginalL'auteur euphoria83 | 2010-08-22
Vous devez vous connecter pour publier un commentaire.
C'est probablement parce que vous cherchez un argument, c'est à dire les gens sont en désaccord sur ce point précis.
Très simple: Toutes les classes de
Exception
(sauf pourRuntimeException
et de ses sous-classes) sont vérifié c'est à dire le compilateur refusera le code unelss vous attraper ou de les déclarer dans la signature de la méthode. Cependant, les sous-classes deRuntimeException
sont décoché.C'est la sagesse conventionnelle, qui dit que pour tout qu'un programme utile de le traiter, vous devez utiliser checked exceptions, car alors le compilateur force vous de traiter avec eux. A l'inverse, les programmes peuvent généralement pas traiter utilement avec le programmeur erreurs, donc ils n'ont pas à être vérifiés. C'est la façon dont la Norme Java API utilise
RuntimeException
.La discussion que vous avez associé est provoquée par la vue de certaines personnes (ce qui comprend moi) qui pensent que les exceptions conduire à un mauvais code, et ne devrait donc pas être utilisé. Puisque vous ne pouvez pas désactiver l'exception de la vérification dans le compilateur, la seule façon de le faire est d'utiliser seulement
RuntimeException
et de ses sous-classes.Une observation que l'OMI soutient ce point de vue est que la sagesse conventionnelle de "l'utilisation incontrôlée des exceptions uniquement pour le programmeur d'erreur" est en fait principalement d'une rationalisation de l'arrière-raisonnement: il n'y a pas de code de sécurité de la raison pourquoi le compilateur ne doit pas vous forcer à composer avec les erreurs du développeur. Cependant, quelque chose comme
NullPointerException
etArrayIndexOutOfBoundsException
pouvez recadrer n'importe où, et si ceux qui ont été contrôlés, dont personne ne voudrait jamais programmer en Java. Ainsi, la langue, les concepteurs ont dû faire un, hein, à l'exception de ceux, et de les rendre non cochée. Pour expliquer cela, ils sont venus avec "unchecked exceptions pour les erreurs du développeur" histoire.donc, si je jette une RuntimeException à partir d'une méthode (par exemple, method1), puis-je l'ignorer dans la méthode qui a appelé cette method1. Parce que, dans le cas d'Exceptions, method1 doit être dans un try-catch phrase ou la méthode qui a appelé, il doit lever une Exception de lui-même.
Bon, je vais préciser que, @euphoria83: exactement.
OriginalL'auteur Michael Borgwardt
Citations de Efficace Java 2nd Edition, Article 58: l'Utilisation checked exceptions pour le recouvrement des conditions et des exceptions d'exécution pour les erreurs de programmation
Voici un exemple:
FileNotFoundException
est un checked exception.null
chaîne comme un nom de fichier, puisNullPointerException
(ou peut-être unIllegalArgumentException
, une autre controverse) devrait être jeté. Client de l'API est censé fournir une valeur valide de la chaîne;null
ne l'est pas. Aussi loin que l'API est concernée, ce qui est une erreur du développeur, qui a été facilement évitables. Ces deux exceptions sont des exceptions d'exécution.Article 59: Éviter l'utilisation inutile des bagages exceptions fournit également des directives supplémentaires:
Voici donc un court résumé de la recommandation de Efficace Java 2nd Edition:
Voir aussi
Définition technique
Un décoché exception est défini comme
RuntimeException
et de ses sous-classes, etError
et de ses sous-classes. Ils n'ont pas à être déclarée dans une méthode dethrows
clause.Références
Questions connexes
IllegalArgumentException
ouNullPointerException
null
paramètre?OriginalL'auteur polygenelubricants