都说类是对象的摸版,编译后这个摸版(类)还存在吗?

解决方案 »

  1.   

    类是对象的共性抽成出来的,对象是类的具体。
    首先,类是抽象的,对象是具体的。
    其次,我想你这里说的是代码中的类,对象是代码中类的某个实例,不知道我这样说对不对?
    类被编译成.class文件,实例当然也在其中。
    类是模板编译后仍然存在,对象在运行的时候才显示他的作用。
      

  2.   

    对,sunnysin的回答其实就是我的看法,但多数人认为编译后类就消失了,我就纳闷,类要不随目标程序一起存在,对象可要根据什么来创建啊.对吧
      

  3.   

    不就是Class对象么,每个类(接口)都有一个Class对象,这就是模板
      

  4.   

    我有个疑问:
    如果说编译后的类还是存在的,那么在程序执行的汇编指令中,,类还会有单独位置存在么?如果说类能完整的存在于汇编指令中,那么对于我们没有用到的类中的那部分方法的代码会不会造成一种资源的浪费呢?在如果说类不能完整的在汇编指令中存在,那么我们又怎么说类在程序中起着模板的作用呢,而且我们编译出的类文件最终也不过是变成各种小的代码片段了。从第二点的角度上说,机器语言和高级语言的矛盾是不是也就是在这个地方。
    我们理解上容易的这种模板-实例的模式对与机器来说是一种累赘,因为机器还需要把这个类根据需要进行不断的拆解,这也是影响程序运行速度的因素吧。不知道我说的是不是有道理。。java初学中。。
    望答复。。
      

  5.   

    经过部分高手的解答,结合我本人的一些思考,我还是觉得编译后类应该是不存在了(对不起sunnysin啊:))因为程序一经编译,数据和函数之间谁该属于谁,谁该调用谁都已一定的逻辑架构固定下来了,类存在就是多余的了.因此类的作用不过两点:辅助程序员编程,辅助编译器编译.
      

  6.   

    这个建议去看看《深入java虚拟机》java分为编译时环境和运行时环境
    编译时只需要一个编译器,它仅仅是将java文件转换为class文件,并不关心类或者对象而运行时环境就是java虚拟机,它的主要任务是装载class文件并且执行其中的字节码。它包含一个类装载器(classloader),它可以从程序和API中装载class文件,只有程序执行时需要的那些类才会被装载,然后字节码由执行引擎通过调用本地方法来执行。
    java是一种解释型语言,所以虚拟机也叫解释器。
      

  7.   

    老子昏
    这个东西还去看《深入java虚拟机》
    中国牛人一堆..
    中国XX也不少
      

  8.   

    老子昏
    这个东西还去看《深入java虚拟机》
    中国牛人一堆..
    中国XX也不少类不存在
    你怎么去new对象啊
    根据什么new啊
      

  9.   

    当然模板的信息就没有了,
    要不1.5的Java Class怎么会跑到1.42上啊?Java的模板和C++的不一样。
      

  10.   

    TO:11楼的XX如果你想成为一个牛人,那本书不会让你走弯路。
    不过看样子你是没戏了,一边晕去吧
      

  11.   

    《深入java虚拟机》 里面说的很清楚啊。 
    编译后还是存在的啊。 
      

  12.   

    asaasa112233和cos100,我原来也跟你们想法一样,目标程序不包含类new就没有了依据,不过实际是源程序中你要new哪个类翻译成目标程序后也是固定了的,意思是这段代码可以做成具有固定内存布局的二进制码,因为诸如"lei duixiang=new lei()"语句不过是为给程序员一个直观感觉而已,实际程序运行过程并非象我们感觉的那样真的从lei 生成(new)一个对象(duixiang),编译器编译new的实际动作是把源程序的类编译成变量和函数调用关系的二进制码格式,其中所谓的给对象分配内存和把对象从内存移除并不是new语句的作用,而是编译器为程序插入的一些内存管理指令系列,让未执行到的代码保留在硬盘上,只有执行到的代码才被调到内存运行(即所谓的new)并将暂时不需要执行的代码人为或自动从内存移除,就是说编译后new就被编译成了一系列的内存管理指令动作,从此看目标代码包含类摸版信息就是多余的了.从这个角度个人感觉类的作用无非是:让程序更容易在源程序中操作代码块,最大限度减少错误.类是一个纯源代码级的概念,纯粹在原代码起作用.