この記事は、主に、次のように、Java言語でのカスタムクラスローダーインスタンスの分析に関する関連コンテンツを研究しています。
私が書いたクラスローダー
このインスタンスをテストする場合は、最初にCドライブにC:// myjavaディレクトリを作成する必要があることに注意してください。次に、対応するJavaファイルをこのディレクトリに配置します。生成された.clasファイルをc://myjava/com/lg.testディレクトリに配置すると、それ以外の場合は見つかりません。これは注意が払われるものです。 。
クラスのfileclassloader:
パッケージcom.lg.test; import java.io.io.bytearrayoutputStream; Import java.io.fileinputStream; Import java.io.ioexception; Import java.io.inputStream;/***は2016/8/6によって作成されました。 */public class fileclassloader extends classloader {string rootdir = null; public fileclassloader(string rootdir){this.rootdir = rootdir;}@Override Protected class(String className)Throws ClassNotFoundExcection {//最初のチェックがロードされたかどうか。 class <? null){return c;} else {/*機能しない場合は、再度読み込みます。 bytecodeの本質はバイト配列*/inputstream is = null; bytearrayoutputStream outputStream = new bytearrayOutputStream(); try {is = new fileInputStream(path); buffer = new byte [1024]; int len = 0; {outputStream.write(buffer、0、len);} c = defineclass(classname、buffer、0、buffer.length);} c = defineclass(classname、buffer、0、buffer.length);} c(例外E){e.printstacktrace(); (ioexception e){e.printstacktrace();}}}}} return c;}}}}}}}クラスデモ:
パッケージcom.lg.test;/***は2016/8/6によって作成されました。 *//*同じクラスローダーが同じクラスをロードし、HasCodeは同じです。異なるクラスローダーは同じクラスをロードし、ハスコードは異なります。 */public class demo {public static void main(string [] args){fileclassloader loader = new fileclassloader( "c:// myjava"); fileclassloader loader2 = new fileclassoloader( "c:// myjava"); try {class <?>> loader.findclass( "com.lg.test.helloword"); class <? c2 = roader.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.out.println(c0.getclassloader(); .hashcode()); system.out.println(c1.getClassLoader()); system.out.println(c2.hashcode()); system.out.println(c2.getclassoloader()); system.out.println(c3.hashcode()); system.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.Out.Println( (classNotFoundException e){e.printstacktrace();}}}最終結果は次のとおりです。
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
ヌル
ネットワーククラスローダーを定義する場合は、URLを使用する必要があります。これは注意が払われるものです。
rootdieの価値をcom.bjsxt.cnに変更できます。次に、url.openstream()を使用します。
上記は、Java言語のカスタムクラスローダーインスタンスの分析に関するものです。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!