In diesem Artikel verwandte Inhalte für die Analyse von Instanzen für benutzerdefinierte Klassenlader in der Java -Sprache wie folgt.
Der Klassenloader, den ich geschrieben habe
Es ist zu beachten, dass Sie zuerst ein C: // Myjava -Verzeichnis auf dem C -Laufwerk erstellen müssen, wenn Sie diese Instanz testen möchten. Geben Sie dann die entsprechende Java -Datei in dieses Verzeichnis ein. Und legen Sie die generierte .clas -Datei in das Verzeichnis c: //myjava/com/lg.test, ansonsten wird sie nicht gefunden. Dies ist etwas, auf das man sich beachten muss. .
Klasse fileClassloader:
Paket com.lg.test; import java.io.bytearrayoutputstream; import java.io.fileinputstream; import java.io.ioxception; import Java.io.inputStream;/*** Erstellt von 2016/8/6. */public class fileClassloader erweitert Classloader {String rootDir = null; public fileClassloader (String rootDir) {this.rootdir = rootDir;}@überschriebene geschützte Klasse <?> FindClass (String ClassName) Throws classNotFoundException {// zuerst prüfen, ob es geladen wurde. Class <?> C = findLoadedClass (className); String path = rootDir + "/" + className.replace ('.', '/') + ".Class"; if (c! = Null) {return c;} else {/*übergeordnetes Delegate -Modus*/classLoader loader -loader = this.getParent (); null) {return c;} else {/*Wenn es nicht funktioniert, laden Sie erneut. Weil die Essenz von Bytecode ein Byte -Array ist 0, len);} c = Definition (className, puffer, 0, buffer.length);} c = Definition (className, puffer, 0, buffer.length);} c (Ausnahme E) {E.printstacktrace ();} schließlich {is! = Null) {try {try {is.close (); {e.printstacktrace ();}}}} return c;}}}}}Klassendemo:
Paket com.lg.test;/*** Erstellt von 2016/8/6. *//*Die gleiche Klasse lädt dieselbe Klasse, und der Hascode ist der gleiche. Verschiedene Klassenlader laden dieselbe Klasse und der Hascode ist unterschiedlich. */public class Demo {public static void main (String [] args) {fileClassloader loader = new FileClassloader ("c: // myjava"); fileClassloader loader2 = new FileClassloader ("c: // myjava"); try {class <> c = lader.findClass ("com.lg.test.helloworld"); class <?> c0 = lader.findClass ("com.lg.test.helloworld"); class <?> c1 = lader2.findclass ("com.lg.test.helloworld"); C2 = lader.findClass ("com.lg.test.demo01"); Klasse <?> c3 = lader.findClass ("com.lg.test.demo01"); Klasse <?> c3 = lader.findClass ("java.lang.String"); System.out.println (C.HashCode ()); System.out.println (C.GetClassloader (); System.out.println (C0.Hashcode (); System.out.Println (c0.getClassLaS () .hashcode ()); (ClassNotFoundException e) {e.printstacktrace ();}}}Das Endergebnis ist:
366712642
sun.misc.launcher$appclassloader@4e0e2f2a
366712642
sun.misc.launcher$appclassloader@4e0e2f2a
366712642
sun.misc.launcher$appclassloader@4e0e2f2a
1829164700
sun.misc.launcher$appclassloader@4e0e2f2a
2018699554
NULL
Wenn Sie einen Netzwerkklassenlader definieren, müssen Sie eine URL verwenden. Dies ist etwas, auf das man sich beachten muss.
Sie können den Wert von RootDie in com.bjsxt.cn ändern. Verwenden Sie dann url.openstream ().
Bei der oben genannten Analyse von Instanzen für benutzerdefinierte Klassenlader in der Java -Sprache. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!