Interne Klasse
Klasse A {// Inner1 kann erst nach einer Initialisierung verwendet werden, dh es ist durch das Objekt A aufgerufen. Klasse Inner1 {int k = 0; // static int j = 0; // Nach dem Laden von A ist inner1 nicht geladen, sodass diese statische Variable j nicht sofort verwendet werden kann, und ein Fehler wird endgültig int z = 0 angegeben. /*static void sagt1 () {}*/void say2 () {}} // inner2 kann statische Klasse inner2 {int k = 0 verwenden; statische int j = 0; endgültig int z = 0; static void sagt1 () {} void sagt2 () {}} // Aufrufen der inneren Klasse void c () {endgültig int x = 0; // Nach endgültigem Modifikation, neu a (). Neue innere 1 (); // nicht statische innere Klasse Inner1, muss das Objekt der Klasse nennen, es ist zu New a (). New Inner1 (). New Inner1 ().). A.inner2.Say1 (); new A.inner2 (). say2 (); // Die nicht statische Methode sagt2 () muss das Objekt der Klasse aufrufen, sie gehört zur Klasse Inner3 {void print () {System.out.println (x); }} / * * Aufruf der lokalen inneren Klasse in der Methode muss nach der Deklaration deklariert werden, * Die Ausführungsreihenfolge in der Methode ist von oben nach unten und diese Klasse * entspricht natürlich einer lokalen Variablen, Sie müssen es zuerst deklarieren und dann * / new Inner3 (). Print () verwenden. }} Klasse Loader java.lang.Classloader
Die grundlegende Verantwortung der Klasse von Java.lang.Classloader besteht darin, den entsprechenden Byte -Code basierend auf dem Namen einer bestimmten Klasse zu finden oder zu generieren und dann eine Java -Klasse aus diesen Byte -Codes zu definieren, dh eine Instanz der Java.lang.Class -Klasse. Darüber hinaus ist Classloader auch für das Laden von Ressourcen verantwortlich, die von Java -Anwendungen wie Bilddateien und Konfigurationsdateien gefordert werden. In diesem Artikel wird jedoch nur die Funktion seiner Ladeklasse erörtert. Um diese Verantwortung für das Laden von Klassen zu vervollständigen, bietet Classloader eine Reihe von Methoden:
getParent () gibt den übergeordneten Klassenlader des Klassenladers zurück.
LoadClass (String -Name) lädt die Klasse mit Namensname, und das zurückgegebene Ergebnis ist eine Instanz der Klasse java.lang.class.
FindClass (String -Name) sucht nach einer Klasse mit dem Namen namens Name, und das zurückgegebene Ergebnis ist eine Instanz der Klasse java.lang.class.
FindloadedClass (String -Name) sucht nach einer geladenen Klasse mit dem Namen namens Name, und das zurückgegebene Ergebnis ist eine Instanz der Klasse java.lang.class -Klasse.
Definition (String -Name, Byte [] B, int Off, int len) konvertiert den Inhalt in der Byte -Array B in eine Java -Klasse, und das zurückgegebene Ergebnis ist eine Instanz der Java.lang.Class -Klasse. Diese Methode wird endgültig deklariert.
ResolVeclass (Klasse <?> C) verbindet die angegebene Java -Klasse.
public class classLoLoLeTest erweitert Classloader {public static void main (String [] args) löscht Sicherheitsexception aus, NoSuchMethodException {// Root Class Loader, die geladene Kernklassenbibliothek url [] urls = sun.misc.launcher.getbootstrapclasspat (). geturls (); für (url u: urls) {system.out.println (u); } // Erweiterte Klassenlader ,, geladene Systemeigenschaften: Klasse unter dem von java.ext.dirs system.err.println ("Erweiterungsklassenloader) Loader" + Classloader.getSystemClassloader (). // Anwendung (System Application Classloader) Klassenlader, Ladesystemumgebungsvariabler Pfad oder ClassPath // angegebenes JAR -Paket und ClassPath System.err.println ("Anwendung (System) Klassenlader" + Classloader.getSystemClassLoader ()); // system.out.println (System.getenv ("Pfad")); // system.out.println (System.getenv ("ClassPath")); }}