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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zl78365336 中级黑马   /  2013-12-9 10:31  /  1349 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zl78365336 于 2013-12-9 14:35 编辑

自定义类加载器,其中ClassLoder是抽象类,可以重写findClass方法,其它方法抽象方法为什么不用重写?



  1. class NetworkClassLoader extends ClassLoader {        
  2.         String host;         
  3.         int port;         
  4.         public Class findClass(String name) {            
  5.                 byte[] b = loadClassData(name);            
  6.                         return defineClass(name, b, 0, b.length);        
  7.         }        
  8.     private byte[] loadClassData(String name) {           
  9.                 // load the class data from the connection            
  10.                 . . .         
  11.         }   
  12. }


复制代码

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

3 个回复

倒序浏览
  1. class NetworkClassLoader extends ClassLoader {        
  2.         String host;         
  3.         int port;         
  4.         public Class findClass(String name) {            
  5.                 byte[] b = loadClassData(name);            
  6.                         return defineClass(name, b, 0, b.length);        
  7.         }        
  8.     private byte[] loadClassData(String name) {           
  9.                 // load the class data from the connection            
  10.                 . . .         
  11.         }   
  12. }
复制代码


我来给你代码整理一下,看起来太费劲了

貌似需要什么方法就复写什么方法,要是其他的都复写,估计你也写不过来吧

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 kongling 于 2013-12-9 11:41 编辑

自己开发的类加载器只需要覆写 findClass(String name)方法即可。java.lang.ClassLoader类的方法 loadClass()会首先调用 findLoadedClass()方法来检查该类是否已经被加载过;如果没有加载过的话,会调用父类加载器的 loadClass()方法来尝试加载该类;如果父类加载器无法加载该类的话,就调用 findClass()方法来查找该类。因此,为了保证类加载器都正确实现代理模式,在开发自己的类加载器时,最好不要覆写 loadClass()方法,而是覆写 findClass()方法。
通常在 findClass()方法查找类的字节代码文件(.class 文件),然后读取该文件内容,自己处理之后(解密之类),最后通过 defineClass()方法来把这些字节代码转换成 java.lang.Class类的实例。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
kongling 发表于 2013-12-9 11:08
自己开发的类加载器只需要覆写 findClass(String name)方法即可。java.lang.ClassLoader类的方法 loadClass ...

总结,关键字就是继承ClassLoader,覆写 findClass(),处理的数据,最后要返回defineClass( )方法,ClassLoader类的其它方法就不用考虑了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马