Raison pour ClassNotFoundException être vérifié exception
Quelle est la raison derrière ClassNotFoundException être vérifié exception?
J'ai été de deviner et de googler essayer de comprendre pourquoi envisager de classe ne trouve pas que vérifiées exception, parce que tout mon esprit me dit qu'il doit être désactivée.
Voici la ligne de fond de la ligne directrice: Si un client peut raisonnablement s'attendre à récupérer d'une exception, d'en faire un checked exception. Si un client ne peut rien faire pour récupérer à partir de l'exception, font qu'il est décochée exception.
La source la plus commune de ClassNotFoundExceptions est un code comme
classLoader.loadClass(className);
que reflectively charge une classe basée sur un nom trouvé dans un fichier de configuration, sérialisé d'entrée, ou appel de procédure distante.
Ceci est en contraste à ClassNotFoundError qui entraînent le plus souvent à partir d'un programme qui a été statiquement compilé avec d'autres classes qui ne peuvent être trouvés par la JVM de l'éditeur de liens lors de l'exécution.
Ce qui distingue le réfléchissant cas d'utilisation (coché) à partir d'un défaut de lien statiquement le code compilé (erreur d'exécution)?
Contexte
Réfléchissant: L'appelant sait où la chaîne vient et pourquoi la charge a été tentée.
Statique: l'Appelant est juste d'essayer d'utiliser une classe qui était disponible au moment de la compilation. Aucun contexte n'est disponible.
De récupération
Réfléchissant: l'Appelant peut échouer sur une mise en œuvre différente ou essayez une stratégie par défaut.
Statique: Le langage Java n'est pas explicitement la substitution de différents points de liaison.
De reformuler
Réfléchissant: l'Appelant doit souvent convertir l'erreur à un autre genre, comme
un IOException sur l'échec de désérialiser.
Statique:
Si une partie de votre programme est manquant, alors vous ne pouvez pas compter sur les partie de votre programme d'être là pour expliquer pourquoi une partie est manquante à d'autres parties.
Un ClassNotFoundException est levée lors de votre code appelle Class.forName() sur un nom de classe qui ne peut pas être résolu à une classe sur votre classpath de l'application (grosso modo). Il pourrait être un mal orthographié classname fourni par l'utilisateur de l'application, et donc il y a potentiellement une raison de le signaler à l'utilisateur et peut-être même réessayer avec un corrigé classname. En d'autres termes ce pourrait être une erreur récupérable ... dans certains cas ... donc on pourrait dire que la décision de faire vérifier le tout est approprié.
De la manière suivante:
la "justesse" de tout choix entre vérifié contre rien n'est une question d'opinion, pas un fait objectif,
dans le passé, la Java, les concepteurs ont fait le mauvais choix, dans certains cas, et
une fois ce choix fait, il n'y a pas de retour en arrière ... sans casser la compatibilité ascendante.
En revanche, si vous avez un problème lors du chargement de classe /de l'initialisation du processus, vous êtes susceptible d'obtenir un NoClassDefFoundError. Ce n'est certainement pas récupérables. Lorsque cela vous arrive, vous avez une ou plusieurs classes dans un état où ils existent dans la JVM, mais ne peut pas être initialisé ou instancié. (Vous verrez également NoClassDefFoundError si la JVM ne parvient pas à trouver votre nomination point d'entrée de la classe. Mais si cela se produit, votre demande ne sera même pas obtenir une chance d'essayer de le récupérer ...)
À mon humble avis la plus grosse erreur a été de faire des SQLException vérifié. Voir mon premier point 🙂 Je vais aller sur une branche et dire que c'est un fait dans ce cas. Quand vous regardez JDBC-à l'aide de code, il est criblé de blocs try-catch qui ne s'habituent jamais. Jamais. Lorsque vous avez des tonnes de pure forme de code, vous savez que vous avez fait une conception de faux pas.
Décoché Exceptions sont utilisés pour les erreurs ont été votre programme ne peut pas s'en remettre. Checked Exceptions sont non valides, les conditions étaient vous pouvez le récupérer à partir.
Et comme je sais que le concept de vérifié les exceptions n'existent que dans Java.
C'est la question le programme peut récupérer à partir d'une ClassNotFoundException?
C'est jeté la plupart du temps par la méthode de la Classe.forName. Cela dépend de votre programme et de sorte que le concept de coché et décoché est un peu aléatoire, car comment l'API de développeur savoir si mon programme peut récupérer ou pas. Quand j'ai besoin de la classe au moment de l'exécution et ne peut pas traiter ce serait un décochée pour moi mais quand je demande à l'utilisateur pour quelque chose et de charger une classe basée sur ce peut-être l'entrée est tout simplement faux et je peux lui demander quelque chose d'autre. Mais la plupart du temps, je dirais que vous ne pouvez pas la récupérer et il serait mieux d'être décochée.
Cependant à mon avis vérifié exceptions sont utilisées par l'api et des tiers afin de rappeler le programmeur que ce problème peut se produire et le besoin d'y penser. Et depuis le chargement de quelque chose basé sur un pur Chaîne pourrait échouer et n'est pas compatible avec l'ensemble de Java statique tapé concept dans la langue de l'exception est marqué comme bagages de sorte que vous rappelle que vous détruisez votre statiques de sécurité. Cependant ce n'est que mon avis.
En fin de compte, la décision est prise par le développeur de l'exception et il peut être juste ou faux ou peut-être pensé au sujet de certains autres raisons I.
Exceptions sont généralement vérifiées lorsque le récepteur peut/doit prendre les mesures nécessaires pour corriger le problème à l'exécution.
Décoché Quelques Exceptions Près — La Controverse dit:
La source la plus commune de
ClassNotFoundException
s est un code commeque reflectively charge une classe basée sur un nom trouvé dans un fichier de configuration, sérialisé d'entrée, ou appel de procédure distante.
Ceci est en contraste à
ClassNotFoundError
qui entraînent le plus souvent à partir d'un programme qui a été statiquement compilé avec d'autres classes qui ne peuvent être trouvés par la JVM de l'éditeur de liens lors de l'exécution.Ce qui distingue le réfléchissant cas d'utilisation (coché) à partir d'un défaut de lien statiquement le code compilé (erreur d'exécution)?
Contexte
Réfléchissant: L'appelant sait où la chaîne vient et pourquoi la charge a été tentée.
Statique: l'Appelant est juste d'essayer d'utiliser une classe qui était disponible au moment de la compilation. Aucun contexte n'est disponible.
De récupération
Réfléchissant: l'Appelant peut échouer sur une mise en œuvre différente ou essayez une stratégie par défaut.
Statique: Le langage Java n'est pas explicitement la substitution de différents points de liaison.
De reformuler
Réfléchissant: l'Appelant doit souvent convertir l'erreur à un autre genre, comme
un
IOException
sur l'échec de désérialiser.Statique:
Si une partie de votre programme est manquant, alors vous ne pouvez pas compter sur les partie de votre programme d'être là pour expliquer pourquoi une partie est manquante à d'autres parties.
OriginalL'auteur Mike Samuel
Un
ClassNotFoundException
est levée lors de votre code appelleClass.forName()
sur un nom de classe qui ne peut pas être résolu à une classe sur votre classpath de l'application (grosso modo). Il pourrait être un mal orthographié classname fourni par l'utilisateur de l'application, et donc il y a potentiellement une raison de le signaler à l'utilisateur et peut-être même réessayer avec un corrigé classname. En d'autres termes ce pourrait être une erreur récupérable ... dans certains cas ... donc on pourrait dire que la décision de faire vérifier le tout est approprié.De la manière suivante:
En revanche, si vous avez un problème lors du chargement de classe /de l'initialisation du processus, vous êtes susceptible d'obtenir un
NoClassDefFoundError
. Ce n'est certainement pas récupérables. Lorsque cela vous arrive, vous avez une ou plusieurs classes dans un état où ils existent dans la JVM, mais ne peut pas être initialisé ou instancié. (Vous verrez égalementNoClassDefFoundError
si la JVM ne parvient pas à trouver votre nomination point d'entrée de la classe. Mais si cela se produit, votre demande ne sera même pas obtenir une chance d'essayer de le récupérer ...)SQLException
vérifié.Voir mon premier point 🙂
Je vais aller sur une branche et dire que c'est un fait dans ce cas. Quand vous regardez JDBC-à l'aide de code, il est criblé de blocs try-catch qui ne s'habituent jamais. Jamais. Lorsque vous avez des tonnes de pure forme de code, vous savez que vous avez fait une conception de faux pas.
OriginalL'auteur Stephen C
Décoché Exceptions sont utilisés pour les erreurs ont été votre programme ne peut pas s'en remettre. Checked Exceptions sont non valides, les conditions étaient vous pouvez le récupérer à partir.
Et comme je sais que le concept de vérifié les exceptions n'existent que dans Java.
C'est la question le programme peut récupérer à partir d'une ClassNotFoundException?
C'est jeté la plupart du temps par la méthode de la Classe.forName. Cela dépend de votre programme et de sorte que le concept de coché et décoché est un peu aléatoire, car comment l'API de développeur savoir si mon programme peut récupérer ou pas. Quand j'ai besoin de la classe au moment de l'exécution et ne peut pas traiter ce serait un décochée pour moi mais quand je demande à l'utilisateur pour quelque chose et de charger une classe basée sur ce peut-être l'entrée est tout simplement faux et je peux lui demander quelque chose d'autre. Mais la plupart du temps, je dirais que vous ne pouvez pas la récupérer et il serait mieux d'être décochée.
Cependant à mon avis vérifié exceptions sont utilisées par l'api et des tiers afin de rappeler le programmeur que ce problème peut se produire et le besoin d'y penser. Et depuis le chargement de quelque chose basé sur un pur Chaîne pourrait échouer et n'est pas compatible avec l'ensemble de Java statique tapé concept dans la langue de l'exception est marqué comme bagages de sorte que vous rappelle que vous détruisez votre statiques de sécurité. Cependant ce n'est que mon avis.
En fin de compte, la décision est prise par le développeur de l'exception et il peut être juste ou faux ou peut-être pensé au sujet de certains autres raisons I.
OriginalL'auteur mszalbach