方法Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
中的类加载器(loader)的指定到底有什么限制,
是不是随便给一个类加载器就可以了阿,
其作用是什么?

解决方案 »

  1.   

    我的理解:加载器应该就是虚拟机的一部分。java编程思想里是这样说的:你通常可以从已经被加载的对象中获得其类加载器。一般使用当前类的加载器就行了, xxx.class.getClassLoader()
    或者使用null,这样的话将使用默认的加载器。CoreJava里是这样说的:A class loader. As part of the Java security model, different class loaders for system classes, classes that are downloaded from the Internet, and so on, can be used. We discuss class loaders in Volume 2. For now, we specify null to use the default class loader.第二卷“安全”一章,有详细论述。每个java程序至少有三个类加载器:引导类加载器,负责加载系统类,也就是标准java库;扩展类加载器,负责加载jre/lib/ext目录下的类;系统类加载器,用于加载应用类。
      

  2.   

    不同的类加载器互相之间有安全限制,我们常用的就是AppClassLoader,系统核心用的是Bootstrp loader,系统扩展类ExtClassLoader,URLClassLoader及自定义ClassLoader。
    不同的Loader就相当于不同的内存空间,空间之间有安全限制,比如我们无法访问Bootstrp loader及ExtClassLoader,这就相当于Windows的内核保护技术。。Java比较严谨,所以加了ClassLoader,考虑到AppClassLoader及自定义ClassLoader。