Classloader类加载器

类加载器的作用:调用class对象的时候,类加载器把class的字节码从硬盘加载进来并进行处理。
3个基本类加载器:
BootStrap ExtClassLoader AppClassLoader
类加载器树形结构
BootStrap是顶级类加载器 JDK核心启动的时候就加载了。
每个累加器都负责固定的区域进行类加载,他们之间是一个委托关系,就是当一个类加载器进行类加载时,先是委托到父类加载器进行查找,如果父级没有,继续传到父级的父级,即孙-》子-》父。当到顶级没有查到的时候就往下推,即父-》子-》孙。
继承的时候,加载父类的加载器由加载子类的加载器进行加载:
例如: Class A extends B{
}
加入A的累加器是AppClassLoader,则B的类加载器也是AppClassLoader


自己写类加载器的时候的工作:
1:继承ClassLoader的类
2:OVERRIDE ClassLoader的findClass()方法;
3:调用defineClass方法返回加载的class
public class MyClassLoader extends ClassLoader{

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
String classFileName = classDir + "\\" + name.substring(name.lastIndexOf('.')+1) + ".class";
try {
FileInputStream fis = new FileInputStream(classFileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();//字节数组流
cypher(fis,bos);//加密方法 这样让自己的class文件只能自己的类加载器加载才有效
fis.close();
byte[] bytes = bos.toByteArray();
return defineClass(bytes, 0, bytes.length);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值