A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清风木扬 中级黑马   /  2014-3-27 11:44  /  1690 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一。类加载器
1.类加载器 ClassLoader
    BootStrp.  加载JRE/lib/rt.jar
    ExtClassLoader.  加载/JRE/lib/ext/*.jar
    AppClassLoader  CLPSSPATH指定的所有jar和目录

2.委托机制(类加载器)   
  Thread.setContextClassLoader(ClassLoader )//设定当前线程的加载器。
  起始加载器可以是:
   2.1.首先当前线程的类加载器去加载线程中的第一个类。
   2.2.如果类A中引用类B,jvm将使用加载类A的类装载器来加载B
   2.3.还可以直接调用ClassLoader.loaderClass()方法来指定某个类加载器去加载

   每个类加载器加载类时,先委托给其上级类加载器。
   当所有祖宗类加载器没有加载到类,回到发起者类加载器,还不能加载
   ,则抛ClassNotFoundException,不是再去找发起者类加载器的儿子,因为没有
  getChiled方法,即使有,那有多个儿子,找哪 一个呢?

  3.能不自己写一类叫java.lang.System。
   类加载采用委托机制,这样可以保证爸爸们优先,也就是总是使用爸爸们能找到的类,
    这样总是使用JAVA系统提供的System。

4.自定义加载器

   得到Class文件转换成字节码-->definclass()
   继承ClassLoader Override  findClass(String name)
   调用 Class ss= new MyClassLoader("itcastlib").loaderClass("");
  //加载的类如果不同包要是public class,有自定义的构造方法。
   
public class MyClassLoader extends ClassLoader {
   
    String dirPath;
   
    public MyClassLoader(String dirPath) {        
        this.dirPath = dirPath;
    }

    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {
        
        String fileName=dirPath+"//"+name+".class";
        try {
            
            InputStream ips=new FileInputStream(fileName);            
            ByteArrayOutputStream baIps=new ByteArrayOutputStream();
            
            int i;
            while((i=ips.read())!=-1)
            {
                baIps.write(i&255);               
                baIps.flush();
            }
            ips.close();
            byte[] bts=baIps.toByteArray();
            baIps.close();
            
            return defineClass(bts, 0, bts.length);
            
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return super.findClass(name);
    }

}


评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

2 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
看完类加载,尤其是自定义类加载器,都晕菜了,思路全都乱套了,求解脱,求思路,这才是real hero
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马