本帖最后由 projoy 于 2011-06-13 21:59:37 编辑

解决方案 »

  1.   

    Person (wrong name: myclassLoader/Person)
    貌似是Person.java的位置不对,不应该放在myclassLoader包下面
      

  2.   

    那应该是放在什么包下面呀?我把三个文件都放在一个包下面了。上面两个源文件里面的package myclassLoader;我没有粘贴出来
      

  3.   

    给你改了一下,jdk不推荐覆盖loadclass方法,推荐使用findclass。
    这三个java文件都放在 myclassLoader目录下面。
    package myclassLoader;import java.io.*;public class MyLoader extends ClassLoader{
        
        public byte[] getBytes(File classfile){
            byte[] raw = new byte[(int)classfile.length()];
            try{
                FileInputStream in = new FileInputStream(classfile);
                int len = in.read(raw);
                if(len!=classfile.length()){
                    System.err.println("wrong what");
                }
            }catch(Exception e){
                System.out.println(e);
            }
            return raw;
        }
        /*
        
        //Subclasses of ClassLoader are encouraged to override findClass(String), rather than this method.
        
        public Class loadClass(String name, boolean resolve){
            Class type = null;
            File classfile  = new File("./Person.class");
            byte[] raw = getBytes(classfile);
            System.out.println("name "+name);
            try{
                type = defineClass(name,raw,0,raw.length);//在这行报错!!!!!!!!!!
            }catch(Exception e){
                System.out.println("OK");
            }
            if((resolve == true)&&(type !=null)){
                resolveClass(type);
            }
            return type;
        }*/
        public Class findClass(String name){ 
         Class type = null;
            File classfile  = new File("./Person.class");
            byte[] raw = getBytes(classfile);
           return defineClass(name,raw,0,raw.length); 
       } 
    }
    package myclassLoader;
    import java.lang.reflect.*;
    import myclassLoader.MyLoader;
    public class Core {
        public static void main(String[] args)throws Exception{
            MyLoader loader = new MyLoader();
            Class type = loader.loadClass("myclassLoader.Person");
            try{
                Person one = (Person)type.newInstance();
                one.say();
            }catch(Exception e){
            }
        }
    }
    package myclassLoader;
    public class Person {
        private String name;
        private int age;
        public Person(){
            name = "Jack";
        }
        public void say(){
            System.out.println(name);
        }
        
        public static void main(String[] args){
            Person p = new Person();
            p.say();
        }
    }