A.class文件内容为:
class A{
    public int i=90;}B.java文件为:import java.io.*;
class B extends ClassLoader{
  public static void main(String[] s) throws Exception{
     FileInputStream in=new FileInputStream("A.class");
     byte[]  b=new byte[1024];
     int cout=in.read(b);
    Class nc=new B().defineClass("A",b,0,cout);
     A a=(A)nc.newInstance();
       
    }
}
编译通过了,但运行时出现下面异常:
Exception in thread "main" java.lang.IllegalAccessException: Class B can not acc
ess a member of class A with modifiers "public"
        at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
        at java.lang.Class.newInstance0(Class.java:344)
        at java.lang.Class.newInstance(Class.java:303)
        at B.main(B.java:10)
该怎么解决啊,请大侠们帮帮忙啊,谢谢了!!!

解决方案 »

  1.   

    public class B extends ClassLoader {
    .....
    public 的类里的main才能够被执行
      

  2.   

    ublic class B extends ClassLoader {
    .....
    public 的类里的main才能够被执行
    与这个无关,楼上是对的,A必须定义为public
      

  3.   

    1.在A类前加上public 编译通过了,但又出现了类型转换异常  A a=(A)nc.newInstance(); 2.另外如果不在A类前加上public,默认是包访问权限的,虽然没有在A,B文件前面加package xx;
    系统会默认这两个类在一个默认包中啊,nc.newInstance();类B应该能够生成类A的实例啊,为什么回出现先前哪个异常啊,
      

  4.   

    很简单,nc是new B()这个ClassLoader加载的,而A a是应用加载器加载的,不同的加载器
    加载的同一个CLASS虚拟机并不认为是一样,关于加载器(ClassLoader),可以见我的blog
    http://ayufox.blogcn.com/
    有一篇对ClassLoader结构有做介绍