Este artículo estudia principalmente contenidos relacionados para el análisis de instancias de cargadores de clase personalizados en el idioma Java, de la siguiente manera.
El cargador de clase que escribí
Cabe señalar que si desea probar esta instancia, primero debe crear un directorio C: // myJava en la unidad C. Luego coloque el archivo Java correspondiente en este directorio. Y coloque el archivo .clas generado en el directorio c: //myjava/com/lg.test, de lo contrario no se encontrará. Esto es algo a lo que ser prestado. .
clase fileClassLoader:
paquete com.lg.test; import java.io.bytearRayOutputStream; import java.io.fileInputStream; import java.io.ioexception; import java.io.inputstream;/*** creado por 2016/8/6. */public class fileClassLoader extiende ClassLoader {String rootDir = null; public fileClassLoader (String rootDir) {this.rootdir = rootDir;}@anular la clase protegida <?> FindClass (String ClassName) lanza ClassNotFoundException {// Verifique si se ha cargado. Class <?> C = findloadedClass (classname); string path = rootDir + "/" + classname.replace ('.', '/') + ".Class"; if (c! = Null) {return c;} else {/*parent delegate*/classloader loaderParent = this.getParent (); c = loaderParent.loadClass (ClassSss (ClassLoader LoaderCoerParent; nulo) {return c;} else {/*Si no funciona, cargue nuevamente. Porque la esencia de Bytecode es una matriz de byte*/inputStream is = null; byteArArAyOutputStream outputStream = new ByteArRayOutPutStream (); try {is = new FileInputStream (Path); Byte [] buffer = new Byte [1024]; int Len = 0; while ((Len = INS.Read (Buffer)) 0, len);} c = definidoClass (classname, buffer, 0, buffer.length);} c = definido {E.PrintStackTrace ();}}}} return c;}}}}}Demo de clase:
paquete com.lg.test;/*** creado por el 2016/8/6. *//*El mismo cargador de clase carga la misma clase, y el Código de HASS es el mismo. Diferentes cargadores de clase cargan la misma clase, y el HASCODE es diferente. */public class Demo {public static void main (string [] args) {fileClassLoader loader = new FilECLassLoader ("c: // myJava"); fileClassLoader Loader2 = new FilEcLassLoader ("c: // myJava"); Try {class <?> c = loader.findclass ("com.lg.test.helloworld"); class <?> c0 = loader.findclass ("com.lg.test.helloworld"); class <?> c1 = loader2.findclass ("com.lg.test.helloworld"); class <?> c2 = loader.findclass ("com.lg.test.demo01"); class <?> c3 = loader.findclass ("com.lg.test.demo01"); class <?> c3 = loader.findclass ("java.lang.string"); system.out.println (c.hashcode ()); system.out.println (c.getClassLoader ()); system.out.println (c0.hashcode ()); system.println (c0.getClassLoader (); system.out.println (c1111111111 .hashcode ()); system.out.println (c1.getClassLoader ()); system.out.println (c2.hashcode ()); system.out.println (c2.getClassLoader ()); system.println (c3.hashcode ()); system.out.println (c3. c3.classLoader (); (ClassNotFoundException e) {E.PrintStackTrace ();}}}El resultado final es:
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
nulo
Si define un cargador de clase de red, debe usar una URL. Esto es algo a lo que ser prestado.
Puede cambiar el valor de RootDie a com.bjsxt.cn. Luego use url.openStream ().
Lo anterior se trata del análisis de instancias de cargador de clase personalizadas en el lenguaje Java. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!