Classe interne
La classe A {// inner1 ne peut être utilisée qu'après l'initialisation de A, c'est-à-dire qu'elle doit être appelée par l'objet A. classe inner1 {int k = 0; // statique int j = 0; // Une fois que A est chargé, inner1 n'est pas chargé, donc cette variable statique J ne peut pas être utilisée immédiatement, et une erreur est signalée final int z = 0; / * static void say1 () {} * / void dise2 () {}} // inner2 peut utiliser la classe statique inner2 {int k = 0; statique int j = 0; final int z = 0; Static void says1 () {} void says2 () {}} // appelant la classe intérieure void c () {final int x = 0; // après la modification finale, new a (). new inner1 (); // non static inner class inner1, doit appeler l'objet de la classe il appartient à new A (). New Inner1 (). Say2 ();); A.inner2.say1 (); Nouveau A.Inner2 (). Say2 (); // La méthode non statique dit2 () nécessite d'appeler l'objet de la classe qu'il appartient à la classe inner3 {void print () {System.out.println (x); }} / * * L'appel de la classe intérieure locale dans la méthode doit être déclaré après la déclaration, * L'ordre d'exécution dans la méthode est de haut en bas, et cette classe * est équivalente à une variable locale bien sûr, vous devez d'abord le déclarer, puis utiliser * / new Inner3 (). Print (); }} Chargeur de classe java.lang.classloadher
La responsabilité de base de la classe java.lang.classloader est de trouver ou de générer le code d'octet correspondant en fonction du nom d'une classe spécifiée, puis de définir une classe Java à partir de ces codes d'octets, c'est-à-dire une instance de la classe java.lang.class. De plus, Classloader est également responsable du chargement des ressources requises par les applications Java, telles que les fichiers image et les fichiers de configuration. Cependant, cet article ne traite que de la fonction de sa classe de chargement. Afin de terminer cette responsabilité de charger des classes, Classloader fournit une série de méthodes:
getParent () Renvoie le chargeur de classe parent du chargeur de classe.
LoadClass (nom de chaîne) charge la classe avec le nom du nom, et le résultat renvoyé est une instance de la classe java.lang.class.
FindClass (nom de chaîne) recherche un nom nommé de classe, et le résultat renvoyé est une instance de la classe java.lang.class.
FindloadClass (nom de chaîne) recherche un nom de classe chargé, et le résultat renvoyé est une instance de la classe java.lang.class.
DefinClass (nom de chaîne, octet [] b, int off, int len) convertit le contenu dans le tableau d'octet B en une classe Java, et le résultat renvoyé est une instance de la classe java.lang.class. Cette méthode est déclarée finale.
RESOLVECLASS (classe <?> C) relie la classe Java spécifiée.
public class classloaderTest étend classloader {public static void main (String [] args) lève la sécurité de sécurité, NosuchMethodexception {// root class chargeer, la bibliothèque de classe de base chargée URL [] urls = sun.Misc.Launcher.getBootSstrapClassPath (). GetUrls (); pour (url u: urls) {System.out.println (u); } // Chardeur de classe étendue ,, Propriétés du système chargées: Classe sous le chemin renvoyé par Java.Ext.Dirs System.err.println ("Extension Classloader) Loader" + Classloader.getSystemClassloader (). GetParent ()); // Not Inherity Relationshi // Application (System Application Classloader) Chargeur de classe, chargement de variable d'environnement système ou classpath // package JAR spécifié et classe ClassPath System.err.println ("Application (System) Class Loder" + classloader.getSystemClassloader ()); // System.out.println (System.Gettenv ("Path")); // System.out.println (System.Gettenv ("ClassPath")); }}