请问 :
有一个类A 
Class cl=A.class;
jvm究竟在内存中做了什么 ?
而   对象.getClass() 以及 Class.forName("类名"); jvm 又做了什么 ?

解决方案 »

  1.   

    前面两个放法就是获得一个Class类对象而已,没做什么;
    Class.forName通过用户当前类加载器根据提供的类名加载类到虚拟机中,然后返回这个类的Class对象。
      

  2.   

    getClass是获取对象的Class对象,Class.forname是要求JVM查找并加载指定的类,JVM会执行该类的类域和静态代码段二者还是有区别的哦
      

  3.   


    答:
    1)Class cl=A.class; JVM将使用类A的类装载器,将类A装入内存(前提是:类A还没有装入内存),对类A做类的初始化工作.返回类A的Class的对象
    2)Class cl=对象引用o.getClass();返回引用o运行时真正所指的对象(因为:儿子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象
    3)Class.forName("类名"); JAVA人都知道.装入类A,并做类的初始化.