黑马程序员技术交流社区

标题: 自己定义的类加载器问题 [打印本页]

作者: 亦金亦水    时间: 2014-7-25 18:42
标题: 自己定义的类加载器问题
自己写了一个类加载器,为什么张老师调用的时候用:new Loader("E:\\MyEclipse Professional 2014\\exam\\bin").loadClass("Loader_HelloWorld");
我像张老师那样调用就不行,下面是我的代码,我这样调用,算不算是我写的加载器是有效的?我打印出的结果是这样的:
com.classLoader.Loader@dd41677
sun.misc.Launcher$AppClassLoader@5552bb15
sun.misc.Launcher$ExtClassLoader@2a788b76
自定义类加载器开始啦!!!!!!
加载器

----------------------------------------ClassLoader_demo 主类---------------------------------------------------------
package com.classLoader;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Date;

public class ClassLoader_demo {
        public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
                // TODO Auto-generated method stub
                Loader ld = new Loader("E:\\MyEclipse Professional 2014\\exam\\bin");
                Class<?> ls = ld.findClass("com.classLoader.Loader_HelloWorld");
                Date t  = (Date)ls.newInstance();
                System.out.println(t.toString());
        }
}
class Loader extends ClassLoader{
        private String dir;
        Loader(String dir){
                this.dir = dir;

        }
        public String path(String classname){
       
                String classpath = dir + File.separatorChar + classname.replace('.',File.separatorChar)+".class";

                return classpath;
        }
        public byte[] file(String classpath) throws IOException{
                String classpath1 = path(classpath);
                InputStream ius = new FileInputStream(classpath1);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                //byte[] bt = new byte[2014];
                int k = -1;
                while((k = ius.read())!=-1){
                        baos.write(k^0xff);       
                }
                return baos.toByteArray();
        }
        @Override
        protected Class<?> findClass(String name) throws ClassNotFoundException {
               
                try {
                        byte[] bt = file(name);

                        if(bt == null)
                                throw new ClassNotFoundException();
                        else{
                        return defineClass(bt,0,bt.length);
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }
                return null;
        };
}
------------------------------Loader_HelloWorld 调用类----------------------------------


package com.classLoader;

import java.util.Date;

public class Loader_HelloWorld extends Date{

         public String toString(){
                 Loader_HelloWorld();
                 String s = "加载器";
                 return s;
         }
                public void Loader_HelloWorld() {
                ClassLoader loader = Loader_HelloWorld.class.getClassLoader();
                while(loader != null){
                        System.out.println(loader.toString());
            loader = loader.getParent();
                }
                System.out.println("自定义类加载器开始啦!!!!!!");
               
        }
}



作者: 亦金亦水    时间: 2014-7-26 08:58
木有人么?自己沙发
作者: 亦金亦水    时间: 2014-7-28 08:51
求大神回复!!
作者: a6511631    时间: 2014-7-28 09:49
我也有这样的高新技术部分的代码部分的问题,无人问津啊:L
作者: 亦金亦水    时间: 2014-7-28 11:35
a6511631 发表于 2014-7-28 09:49
我也有这样的高新技术部分的代码部分的问题,无人问津啊

饿。大神都去泡妹子去了!你的问题链接在哪,我看看
作者: fantacyleo    时间: 2014-7-28 11:51
没问题啊,你这不都打印出来自定义加载器了么?
作者: a6511631    时间: 2014-7-28 12:29
亦金亦水 发表于 2014-7-28 11:35
饿。大神都去泡妹子去了!你的问题链接在哪,我看看

http://bbs.itheima.com/thread-133034-1-1.html
作者: a6511631    时间: 2014-7-30 08:57
本帖最后由 a6511631 于 2014-7-30 08:58 编辑

问题解决了吗?这种提示是看不出有没有在用自定义的类加载器的,你写一句 System.out.println("自定义类加载器!");到ClassLoader_demo类的findClass方法里面去,这样才看得清楚。如果用的自己的类加载器就会把这句话打印出来。
作者: java木    时间: 2014-7-30 11:16
把要打印的话放在toString方法里,错误提示那时这样的。

作者: 亦金亦水    时间: 2014-7-30 14:10
a6511631 发表于 2014-7-30 08:57
问题解决了吗?这种提示是看不出有没有在用自定义的类加载器的,你写一句 System.out.println("自定义类加 ...

我试试吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2