突然想到一个很菜的问题, 倒底先有Object还是先有Class?所有类都是Object的子类, Object是作为一个类(class)而存在, 而每一个类又都对应一个class对象(object), 那么Object和Class到底是一个什么样的逻辑关系呢? 想来想去, 感觉有点陷入了"是鸡生蛋还是蛋生鸡"的怪圈了.顺便散分!

解决方案 »

  1.   

    当然是先有Class了,有了Class,才有了Object,然后又把Object放回到Class中了~~ :-)
      

  2.   

    这个问题有意思。
    如果没有OBJECT就没有CLASS,当然有CLASS不一定就有OBJECT,CLASS是对OBJECT的抽象,我认为还是先有抽象。CLASS不过是人们思想过程的结果。
      

  3.   

    写错了,应是先有对象,然后有抽象的结果CLASS
      

  4.   

    楼上二位, 不要忘了, Class本身也是一个类, 所有的类都是Class类的实例呀.
      

  5.   

    的确难说,因为Object本身就是一个class,应该是同时产生
      

  6.   

    你这个问题问得就有问题啊?
    Object是所有类的超类,包括Class类也是继承Object的,Class类本身就是一个类,所有类包括基本数据类型都是Class类对象,当然属于Object。
      

  7.   

    经典列子:    我们说“车”,那么这是一个Class
        
        我们说“丰田VISO 1.8GL轿车”,那这是一个Object,他是属于Class,但是和Class有区别    Class 不过是一个感念,而 Object 是这个概念的具体化结论:Class 是一系列性质相似的Object 的总称,他不过是个名称而已。没有Object ,Class永远也只是个名字。    不过,static 的Class 就不一样了
      

  8.   

    Class 只能由 JVM 生成, 也就是说 Java 程序运行前提是 JVM 先准备好 Class 对象, 虽然这也是Object ,但是它是其他所有对象的起点,
      

  9.   

    Object相当于一个接口吧!
    Class是它的实现体,两者不矛盾啊!
      

  10.   

    1.你这个问题本身问的就有问题.class本身就是一个object.java.lang.Class是继承了java.lang.Object的。
    2.jvm虚拟机启动的时候第一步就是先后载入核心类库class(eg:rt.jar)->扩展库class->classpath中的jar的class.这些class以二进制码的形式存在服务器的内存,严格说jvm的内存地址空间中。
    当你在程序中使用到某一个class,比如:ArrayList.虚拟机会从核心类库class所在地址空间开始查询,一直查询到自定义jar的class所存在的地址空间中(如果没有找到则报错).找了class所对应的二进制码,再根据这个class所属的类型,用Bootstrap ClassLoader或Extension ClassLoader或AppClassLoader进行加载,把class对应的二进制码变为class object.这时候,你就可以使用这个class object,执行实例化。
      

  11.   

    3.总而言之,你可以看看Think in java(第2版)的标题:Everything is an Object.
    既然是everything,那当然也包括了class了。
      

  12.   

    女娲造人,先造出来的是身体啊(好像就该是object的类文件class object),然后吹了一口气,泥人就活了,这时候女娲就不用工作了,他造的人自己也会做造人运动了
      

  13.   

    类是编译时概念,Class对象是运行时概念。
      

  14.   

    在程序员看来,类是构造对象的模板,但在JVM看来,这么多的类,怎么管理呢?对于一个给定的类,又如何这个类的信息在创建它的实例呢?如何在运行时获得一个对象所属的类的信息甚至进行反射呢?Sun公司写JVM的程序员当然不是傻瓜,他们才不会用乱七八糟的方式来管理这些加载进来“类”呢,他们当然也可以考虑用OO技术来实现JVM,于是他们让JVM没加载一个类的时候,就实例化一个Class对象,并把这个类的相关信息(名字是什么,有那些方法,那些字段等等等等)保存在这个对象里头,这样,就可以用面相对象的方式来管理所有的类了。
      

  15.   

    总结:
    引起各位以上争端的主要问题是class,和Class的区别。Object类和平常所说的对象的区别我看上面很多人都误解了这两个东西。在JVM中,是先load类,再从该类产生一个该类的对象。
      

  16.   

    object-class-object
    事物-类-对象
    是这么理解的
      

  17.   

    我觉得还是很有意义的,能够理清你的思路,更深层次的认识java的机制.
      

  18.   

    java起源应该是先有object,然后从object抽象出类,而在实际编程中是先有类,而后有object
      

  19.   

    那要看从哪个角度去想吧。
    从类的角度对想,所有class都是从Object类继承的,当然是先有Object这个类的定义了,要不,别的类怎么继承呢。
    从分配内存的角度,定义一个class,那么内存中只实例了一个class类,即使他是从Object继承的,也没有分配Object这个类,这样,Object这个类,就根本没有过。
      

  20.   

    实际生活中:人们对事物的认识过程往往是从具体到抽象
    可能在Java语言的创建之初,本着面向对象的思想,大家先有object的想法,然后对object
    进行抽象,就出现了class至于现在Java语言中的机制,应该是先有class,然后创建class的实例--object
      

  21.   

    就是没有弄明白java.lang.Class类和OO里面的class的关系
      

  22.   

    万物皆对象(Object),Class只是Object的存在形式。