本帖最后由 u010568859 于 2013-09-08 21:36:36 编辑

解决方案 »

  1.   

    1.编译时生成的class类是一个文件,用来存储jvm能执行的指令集和类的信息.
    2.JVM要运行程序就要在jvm中找到执行的指令,没有class对象就没有相应的指令.所有要加载class,把class加载到了JVM就会在JVM的方法区里生成类信息也就是class对象,等你在代码里有new操作时,就会在JVM的堆区里生成一个实例每个new都会有不同的实例.
    所以class类的class对象只是一个概念,
      

  2.   

    那请问是不是说类的Class对象是在加载类的时候JVM创建的呢
      

  3.   

     Java源程序(.java文件)在经过 Java编译器 编译之后就被转换成 Java字节代码(.class 文件)
    JVM会执行该类的静态代码段,动态加载和创建Class 对象楼主这和c++的静态绑定动态绑定是一样的
      

  4.   

    很感谢你的解答,有些书上就是你的这个意思,加载类的时候动态创建Class对象,但是有些书上不是,有些书上说的是每当编写并编译了一个java类后就产生了一个Class对象,保存在同名的.class文件中(包括网上好多都这么说),甚至有些视频就是直接说类对应的Class对象就是类字节码文件(每个字节码文件就是一个Class对象)。
    如果是按你说的那个意思:
    class LoadedClass{
       static{
        System.out.println(“类LoadedClass载入”);
       }
       public LoadedClass(){
        System.out.println(“类LoadedClass实例化”);
       }
      }
      
    class Test{
        public static void main(String[] args){
        System.out.println(“以下是通过.class的方式取得LoadedClass类的Class对象”);   
        Class cls=LoadedClass.class;
        }
       }
    运行结果:
    以下是通过.class的方式取得LoadedClass类的Class对象通过“类名.class”方式可以取得Class的对象,由运行结果看出此时静态代码块没有执行,也就是说类并没有加载,那么我们课本上说:Class对象是在加载类时由JVM或者调用类加载器中的defineClass方法自动构造的。此时类并没有加载,按这种说法就说JVM就还没有创建Class对象,但是现在“类名.class”方式取得的Class对象是哪里来的呢?