免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
話のClassLoader
クラスローダ種
(1)BootStraoClassLoader:C ++で書かれた、コアライブラリのJavaをロードする。
(2)ExtClassLoader:Javaは、拡張のjavaxをロードするために書かれた。
(3)AppClassLoader:Javaの書き込み、ディレクトリ・ローダ
(4)ユーザ定義のクラスローダ:、Javaの書き込みカスタム負荷の**
良いコンパイラの定義以来、最初のjavaファイルであればWali.javaファイルの良い定義
特定のコードの実装
public static void main(String[] args) throws Exception {
MyClassLoader mc = new MyClassLoader("xxx","xxx");
Class c = mc.loadClass("Wali");
System.out.println(c.getClassLoader());
c.newInstance();
}
}
public class MyClassLoader extends ClassLoader {
private String path;
private String classLoaderName;
public MyClassLoader(String path,String classLoaderName){
this.path = path;
this.classLoaderName = classLoaderName;
}
//用于寻找类文件
public Class findClass(String name){
byte[] b = loadClassDate(name);
return defineClass(name,b,0,b.length);
}
//用于加载类文件
private byte[] loadClassDate(String name) {
name = path + name + ".class";
InputStream in = null;
ByteArrayOutputStream out = null;
try {
in = new FileInputStream(new File(name));
out = new ByteArrayOutputStream();
int i = 0;
while ((i = in.read()) != -1) {
out.write(i);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return out.toByteArray();
}
}