Artikel ini terutama mempelajari konten terkait untuk analisis instance loader kelas khusus dalam bahasa Java, sebagai berikut.
Loader kelas yang saya tulis
Perlu dicatat bahwa jika Anda ingin menguji contoh ini, Anda harus terlebih dahulu membuat direktori C: // Myjava di drive C. Kemudian masukkan file Java yang sesuai di direktori ini. Dan letakkan file .clas yang dihasilkan di direktori c: //myjava/com/lg.test, jika tidak itu tidak akan ditemukan. Ini adalah sesuatu yang harus diperhatikan. .
Kelas FileClassloader:
Paket com.lg.test; impor java.io.bytearrayoutputStream; impor java.io.fileInputStream; import java.io.ioException; import java.io.inputStream;/*** dibuat oleh pada 2016/8/6. */kelas publik FileClassLoader memperluas classloader {string rootdir = null; public fileclassloader (string rootdir) {this.rootdir = rootdir;}@override class yang dilindungi <?> FindClass (String ClassName) melempar ClassNotFoundException {// Periksa apakah itu sudah dimuat. Class <?> C = findloadedclass (className); string path = rootdir + "/" + className.replace ('.', '/') + ".Class"; if (c! = Null) {return c;} else {/*parent delegate mode*/classLoader loadererparent = this.getparent (); null) {return c;} else {/*Jika tidak berfungsi, muat lagi. Because the essence of bytecode is a byte array*/InputStream is = null;ByteArrayOutputStream outputStream = new ByteArrayOutputStream();try {is = new FileInputStream(path);byte[] buffer = new byte[1024];int len = 0;while ((len = is.read(buffer)) != -1) {outputStream.write (buffer, 0, len);} c = Defineclass (className, buffer, 0, buffer.length);} c = Defineclass (className, buffer, 0, buffer.length);} c (pengecualian e) {e.printstacktack ();} {if) {o, {oD) {{{{{{{{{E.PrintStack (); (IOException e) {E.PrintStackTrace ();}}}} return c;}}}}}Demo Kelas:
Paket com.lg.test;/*** dibuat oleh pada 2016/8/6. *//*Kelas Loader yang sama memuat kelas yang sama, dan kode haskode sama. Loader kelas yang berbeda memuat kelas yang sama, dan kode haskode berbeda. */Demo kelas publik {public static void main (string [] args) {fileclassloader loader = new fileclassloader ("c: // myjava"); fileclassloader loader2 = new fileclassloader ("c: // myjava"); coba {class <?> C = loader.findClass ("com.lg.test.helloworld"); class <?> c0 = loader.findclass ("com.lg.test.hellororld"); 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.out.println (C0.get .hashCode ()); System.out.println (c1.getClassLoader ()); System.out.println (c2.hashcode ()); System.out.println (c2.getClassLoader ()); System.out.println (c3.hashcode (); austclassLoader (ClassNotFoundException e) {E.PrintStackTrace ();}}}Hasil akhirnya adalah:
366712642
sun.misc.launcher$ applassloader@4e0e2f2a
366712642
sun.misc.launcher$ applassloader@4e0e2f2a
366712642
sun.misc.launcher$ applassloader@4e0e2f2a
1829164700
sun.misc.launcher$ applassloader@4e0e2f2a
2018699554
batal
Jika Anda mendefinisikan loader kelas jaringan, Anda perlu menggunakan URL. Ini adalah sesuatu yang harus diperhatikan.
Anda dapat mengubah nilai rootdie menjadi com.bjsxt.cn. Kemudian gunakan url.openstream ().
Di atas adalah semua tentang analisis instance loader kelas khusus dalam bahasa Java. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!