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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.itheima.day02;

  2. import java.io.ByteArrayOutputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;

  8. public class MyClassLoader extends ClassLoader
  9. {
  10.         public static void main(String[] args) throws Exception
  11.         {
  12.                 String srcPath=args[0];
  13.                 String descPath=args[1];
  14.                 FileInputStream fis=new FileInputStream(srcPath);
  15.                 FileOutputStream fos=new FileOutputStream(descPath);
  16.                 cypher(fis, fos);
  17.                 fis.close();
  18.                 fos.close();
  19.         }
  20.        
  21.         private static void cypher(InputStream is,OutputStream os)throws Exception
  22.         {               
  23.                 int b=0;
  24.                         while((b=is.read())!=-1)
  25.                         {
  26.                                 os.write(b^0xFF);
  27.                         }               
  28.         }
  29.         private String classDir;
  30.        
  31.         @Override
  32.         protected Class<?> findClass(String name) throws ClassNotFoundException
  33.         {
  34.                 String classFileName=classDir+"\\"+name+".class";
  35.                 try
  36.                 {
  37.                         FileInputStream fis=new FileInputStream(classFileName);
  38.                         ByteArrayOutputStream bos=new ByteArrayOutputStream();
  39.                         cypher(fis,bos);
  40.                         fis.close();
  41.                         byte[] bytes=bos.toByteArray();
  42.                         return defineClass(bytes, 0, bytes.length);
  43.                 }
  44.                 catch (FileNotFoundException e)
  45.                 {
  46.                         // TODO Auto-generated catch block
  47.                         e.printStackTrace();
  48.                 }
  49.                 catch (Exception e)
  50.                 {
  51.                         // TODO Auto-generated catch block
  52.                         e.printStackTrace();
  53.                 }
  54.                 return super.findClass(name);
  55.         }
  56.        
  57.         public MyClassLoader(){}
  58.        
  59.         public MyClassLoader(String classDir)
  60.         {
  61.                 this.classDir=classDir;
  62.         }
  63. }
复制代码
  1. package com.itheima.day02;

  2. public class ClassLoaderTest
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 System.out.println(ClassLoaderTest.class.getClassLoader().getClass()
  7.                                 .getName());
  8. //                System.out.println(System.class.getClassLoader());
  9.                
  10.                 ClassLoader loader=ClassLoaderTest.class.getClassLoader();
  11.                 while(loader!=null)
  12.                 {
  13.                         System.out.println(loader.getClass().getName());
  14.                         loader=loader.getParent();
  15.                 }
  16.                 System.out.println(loader);
  17.         }
  18. }
复制代码
  1. package com.itheima.day02;

  2. import java.util.Date;

  3. public class ClassLoaderAttachment extends Date
  4. {
  5.         public String toString()
  6.         {
  7.                 return "hello";
  8.         }
  9. }
复制代码

请亲们给我详细的解释一下,关于类加载器的相关问题,听这儿的时候有点晕。。  
还有上面代码的具体解释,原理。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

2 个回复

倒序浏览
不过。貌似代码有点不全。。 因为,听这儿的时候有点晕
回复 使用道具 举报
大神们、没有指教的吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马