通过classLoader加载一个类有什么作用,和创建对象有什么区别。还有既然可以创建对象,为什么还要加载类?

解决方案 »

  1.   

    还有类的实例和对象的实例有什么不同?我用Class.forName("com.mysql.jdbc.Driver")是不是创建了一个类的实例,同时会执行里面的静态代码?
      

  2.   

    通过ClassLoader加载一个类,可以增强程序的动态性。如果是在程序里创建对象new XXX(),则程序编译后,系统的行为就固定了,
    如果要有所调整,就要改代码重新编译。通过ClassLoader加载类,只需要一个名字,你就可以创建一个类的实例,
    所以,真正要创建的类名,可以做成一个配置项,独立于程序的编译和发布。如果没有这种动态类加载技术,像JDBC、Spring、Struts等各类框架基本上就都没有办法工作了(因为这些框架都是在配置文件中配置了大量的类,如:Action,Bean,Service等)。----------------参考这篇文章:
    http://java.sun.com/developer/technicalArticles/ALT/Reflection/index.html
      

  3.   


    类的实例,你的意思应该是特指"Class"这个类的实例,
    没有所谓的对象的实例,实际上都是类的实例,
    只是,Class这个类的实例,代表的是一个java类自身的信息(可以称为元数据)。Class.forName("com.mysql.jdbc.Driver")
    这句话创建了Class这个类的一个实例,
    该实例描述的是:com.mysql.jdbc.Driver这个类的定义。实际上它和普通类没有本质的差异。
      

  4.   


    在java中,第一次new一个对象,实际上做了两件事儿:
    创建了这个对象的Class实例(就是你说的静态变量初始化啥的),这一步只在第一次new类的时候做
    再创建这个类的一个对象。这些实际上都是虚拟机的工作,
    但现在java开放了这个功能,允许我们自己写的程序来加载类,
    和系统完成的功能没有差异,只是要强调 动态 , 我们的程序可以动态的决定加载哪个类。