Considérez cette paire de lancable code>: p>
3 Réponses :
La description explique déjà une partie: l'exception code> code> est lancée lorsque vous utilisez la réflexion pour accéder à un champ ou invoquer une méthode qui n'est pas accessible; L'erreur Un Une erreur est une sous-classe de lanceurs qui indique de graves problèmes qu'une application raisonnable ne devrait pas essayer d'attraper. La plupart des erreurs de ce type sont des conditions anormales. L'erreur de filtration, bien que une condition "normale", est également une sous-classe d'erreur car la plupart des applications ne doivent pas essayer de l'attraper. P>
La méthode n'est pas nécessaire pour déclarer dans sa clause de lancement des sous-classes d'erreur pouvant être lancées lors de l'exécution de la méthode mais non capturée, car ces erreurs sont des conditions anormales qui ne devraient jamais se produire. P>
blockQuote>
Un exemple pour générer Un exemple pour générer Il existe d'autres paires de code> est lancée lorsque vous le faites directement (et pour une raison quelconque, le compilateur n'avait pas la chance de l'attraper - par exemple lorsque vous avez une ancienne version d'un fichier de classe autour, dans lequel le champ ou la méthode que vous essayez d'utiliser est privée). p>
erreur code> indique normalement qu'il y a quelque chose de vraiment faux - il y a presque certainement un bogue dans le logiciel. Vous ne devriez jamais essayer d'attraper
erreur code> s. Si vous attrapez le
xxxexception code>, il n'y a pas de raison immédiate pour attraper également le
xxxError code>. La documentation de
erreur code> dit: p>
IllegalAccessException code>: via la réflexion, consultez une méthode privée dans une classe et essayez de l'appeler. P>
IllegalAccessError Code>: Créez deux classes et enregistrez-les dans deux fichiers source
a.java code> et
b.java code>. En classe
A code>, crée une méthode publique et dans la classe
b code>, appelez cette méthode. Compiler les fichiers source. Maintenant, éditez
a.java code> et crée la méthode privée et recompille uniquement
a.java code> (pas
b.java code>). Maintenant essayez de courir à nouveau;
B code> essaiera d'appeler la méthode et de lancer un
illegalAccessError code>. p>
xxxException code> /
xxxError code> qui semblent liés, mais ils n'ont pas toujours exactement les noms correspondants; Par exemple
ClassNotFoundException Code> /
NOCLASSDEFFUTERORROR code>. P>
Il y a plusieurs paires d'exception / erreur dans D'autres exemples sont : P> java.lang code> et la totalité de la transaction suivante avec réfléchissant ou utilisation directe:
java.awt.AWTException / java.awt.AWTError
java.io.IOException / java.io.IOError
Les Javadocs n'istent que "utilisations" d'une classe pouvant être déduites des signatures visibles. Les exceptions d'erreur sont rarement (de tous les temps) déclarées dans lancent des clauses code>, de sorte que l'outil Javadoc ne sait donc pas à leur sujet.
Quelqu'un peut-il donner un exemple de code où chacun est lancé? P> blockQuote>
Le
IllegalAccessException code> est lancé lorsque vous essayez d'utiliser la réflexion pour invoquer une méthode ou lire ou écrire un champ interdit par les règles de visibilité Java. P>
Un
IllegalAccessError code> ne peut pas être lancé par un code Java compilé systématiquement. Il se produit quand par exemple, vous chargez une classe qui tente d'invoquer une méthode ou de lire ou d'écrire un champ dans une autre classe interdite par les règles de visibilité Java. C'est quelque chose que le compilateur empêcherait normalement, cela signifie donc qu'il y a quelque chose de sérieusement mal avec les classes. En tout cas, cela est considéré comme une "erreur"; I.e. non récupérable, et le chargeur de classe refusera de charger la classe infractions. p>
La similarité de Nom implique-t-elle une relation entre les deux, ou est-ce juste une coïncidence pure? P> blockQuote>
Il y a une relation claire entre les deux. La différence est les circonstances dans lesquelles les deux se produisent. P>
Y a-t-il d'autres combo xxxError et xxxException? Comment les paires sont-elles liées les unes aux autres? P> blockQuote>
passe. Vérifiez les Javadocs. P>
Si vous essayez explicitement d'en prendre un dans une paire d'exception / erreur, devriez-vous aussi attraper l'autre? P> blockQuote>
Probablement pas. La XXXError et la xxxException se produisent généralement dans différentes circonstances. (Cela s'applique certainement aux celles de la classes réfléchissantes.) P>
En outre, en règle générale, vous ne devriez pas essayer d'attraper et de récupérer des sous-types de
erreur code>. L'ensemble point de séparation code> d'erreur code> de
exception code> est de distinguer les exceptions non récupérables et (potentiellement) récupérables. P>
Dans ce cas, il n'y a rien qu'une application normale puisse faire de la récupération du
illegalAccessError code>. Si vous essayez de répéter l'opération ClassLoader qui a causé le problème, cela se reproduira simplement. P>
Très bonne réponse! En outre, c'est pourquoi Catch (Distanrable T) {} Code> sans
Thuk T; code> est vraiment mauvaise nouvelle; Les erreurs d'alimentation accidentelle peuvent faire échouer votre programme spectaculairement, y compris le refus d'être tué sans traiter de manière forcée.