为什么要用到classloader去装载类,new是不是跟classloader类似,还是两者有根本性的区别

解决方案 »

  1.   

    你new的时候还不是用classloader去装载类的?
      

  2.   

    要用到classloader去装载类,一般是比较复杂的系统,如存在动态类装载,reflect,ejb,aop等环境。
    new的时候也是用classloader去加载的,只不过是其不同子类罢了。
    另外,classloader存在下面问题: 
    在一个jvm中可能存在多个classloader,每个classloader拥有自己的namespace。一个classloader只能拥有一个class对象类型的实例,但是不同的classloader可能拥有相同的class对象实例,这时可能产生致命的问题。如classloadera,装载了类a的类型实例a1,而classloaderb,也装载了类a的对象实例a2。逻辑上讲a1=a2,但是由于a1和a2来自于不同的classloader,它们实际上是完全不同的,如果a中定义了一个静态变量c,则c在不同的classloader中的值是不同的。 
    就因为这样,classloader可以避免一些问题,比如eclipse的插件管理,不同的插件,可能有相同的包,相同的名字,用不同的classloader加载就可以避免这些问题
      

  3.   

    不同的classloader实例的对象有各自的静态变量
      

  4.   

    classloader有四种,根类加载器、扩展类加载器、系统类加载器和自定义的类加载器,其最显著的特点是不同的类有不同的加载器来加载,可以避免出现用户加载带有攻击性的根类等破坏程序,提高程序的安全性。类加载完毕后自动创建一个代表当前类的对象,用new创建对象应该是加载类完毕之后的,只要找到方法区的类即可。
      

  5.   

    new是前期绑定,classloader是后期绑定吧
      

  6.   


    xie xie, xue xi le