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;
}

}
    
    

你可能感兴趣的:(jdk,工作)