另外,大家在说说什么时候要去实现一个自定义的类装载器啊,最好推荐一下这方面的比较详细的资料。谢谢各位了

解决方案 »

  1.   

    2个的区别我不清楚 第二个没用过 ,第一个Class.forName(classname) 我在一个项目中见过,用起来很微妙
    DataAccessFactory 是一个抽象类,不能实例化
    private DataAccessFactory _daoFactory = null;
    _daoFactory = DataAccessFactory.getFactory("DaoFactory");
    通过调用getFactory,
    ConfigReader conf = PropertyConfigReader.getInstance();
    String className = conf.getValue(implClassRef);
    result = (DataAccessFactory) Class.forName(className).newInstance();
    传进来一个字符窜,通过转换到资源文件中找实现类的地址 ,className 就是实际地址,
    通过这样创建类的实例,我猜想大概就是要达到模块间的分离吧,这个项目日本人写的,觉得搞的很复杂
      

  2.   

    猜想class.forName会去调用ClassLoader.loadClass.
      

  3.   

    默认的装载器无法装载自己的class的时候.
      

  4.   

    public static Class forName(String className)
                         throws ClassNotFoundException
    会调用
    public static Class forName(String name,
                                boolean initialize,
                                ClassLoader loader)
                         throws ClassNotFoundException
    使用第一个的情况下默认使用的是当前的loader, 第二个函数可以指定loader来加载类.
      

  5.   

    public static Class forName(String className)
                         throws ClassNotFoundException
    装载类时会调用当前的类装载器
    ClassLoader.loadClass(classname)装载指定命名空间中的类,同时决定在类运行时的权限
    安全性更高
      

  6.   

    推荐去看java深度历险。
    里面就是讲这个的。
      

  7.   

    是的。。其实public static Class forName(String className)的时候,在默认赋了null,loader.getCallerLoader(名称忘记了)
      

  8.   

    Class.forName(str)//是从当前的类使用的加载器加载str对应的类ClassLoader.loadClass(str) 可能是从当前类使用的类加载器加载,也可能不是
      

  9.   

    给你一个地址,可能有帮助
    http://www.java3z.com/cwbwebhome/article/article2/2288.jsp?id=827