谈谈ClassLoader
ClassLoader的种类
(1)BootStraoClassLoader:C++编写,加载核心库java.
(2)ExtClassLoader:Java编写,加载扩展库javax.
(3)AppClassLoader:java编写,加载程序所在目录
(4)用户自定义ClassLoader: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();
}
}