自定义类加载器DEMO

MyClassLoader.java



import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class MyClassLoader extends ClassLoader { private String name; private String path = "d:/"; private String fileType = ".class"; public String getPath() { return path; } public void setPath(String path) { this.path = path; } public MyClassLoader(String name){ super(); this.name = name; } public MyClassLoader(ClassLoader parent,String name){ super(parent); this.name = name; } @SuppressWarnings("deprecation") @Override public Class<?> findClass(String name) throws ClassNotFoundException { byte[] data = classToByteArray(name); return data!=null ? defineClass(data, 0, data.length):null; } public byte[] classToByteArray(String name){ name = name.replace(".", "/"); File file = new File(path+name+fileType); if(!file.exists())return null; InputStream is = null; ByteArrayOutputStream baos = null; byte[] data = null; try{ is = new FileInputStream(file); baos = new ByteArrayOutputStream(); int a =0; while(-1 != (a = is.read())){ baos.write(a); } data = baos.toByteArray(); }catch(Exception e){ e.printStackTrace(); }finally{ try { baos.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } } return data; } public static void main(String[] args)throws Exception { MyClassLoader loader1 = new MyClassLoader("loader1"); loader1.setPath("d:/loader/loader1/"); MyClassLoader loader2 = new MyClassLoader(loader1,"loader2"); loader2.setPath("d:/loader/loader2/"); MyClassLoader loader3 = new MyClassLoader(null,"loader3"); loader3.setPath("d:/loader/loader3/"); Class clazz = loader2.loadClass("Person"); Class clazz1 = loader3.loadClass("Person"); clazz.newInstance(); clazz1.newInstance(); } @Override public String toString() { return this.name; } }

Person.java

public class Person { public Person(){ System.out.println("Person class is init by : " +this.getClass().getClassLoader()); new Dog(); } }


Dog.java


public class Dog { public Dog(){ System.out.println("Dog class is init by : " +this.getClass().getClassLoader()); } }


结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值