说实话,学了那么久java,还真不知道楼主标题上的问题。
我现在手头上有《深入java虚拟机》,但还没看,我想以后看了会有点眉目吧!
如果楼主想了解这类的支持看看javap命令和我说的书吧

解决方案 »

  1.   

    我也有那本书,买了还没看,惭愧.......
    javap我也用过,不过好像跟这个没啥关系吧
      

  2.   

    java -verbose : class XXX//XXX为你的java文件可以看看过程
      

  3.   

    to tomuno:那是jvm干的事情吧,class文件还不是机器语言吧
      

  4.   

    把程序代码编译成字节码,这个字节码(.class文件)在任何有jvm的平台上都能运行。
    这也是java的聪明之处,借此它说一处编译,多处运行。至于java XXX.class的时候,jvm会把字节码转换成相应平台的机器代码来运行。
      

  5.   

    应该是javac -verbose XXX[parsing started Test.java]
    [parsing completed 156ms]
    [loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/lang/Object.class)]
    [loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/lang/String.class)]
    [checking Test]
    [loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/lang/System.class)]
    [loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/io/PrintStream.class)]
    [loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/io/FilterOutputStream.class)]
    [loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/io/OutputStream.class)]
    [wrote Test.class]
    [total 609ms]
      

  6.   

    对了,由于构造函数是由编译器调用的,因此编译器必须要知道能调用哪个方法。这句话里的编译器我觉得应该是指jvm才对,这样应该就没有什么问题了
      

  7.   

    你说的thinking in java中的问题,意思是说,需要采用一种机制来告诉编译器在为对象分配内存时能够自动执行一些必要的初始化操作。那么java采取的方法与c++是一样的,就是与类名同名的方法为构造方法,编译器会自动调用这个方法执行初始化,如果没有显式声明,那就执行默认方法。
      

  8.   

    楼上的错了,应该是
    javac -verbose XXX.java由于构造函数是由编译器调用的,因此编译器必须要知道能调用哪个方法.
    这是因为有多个构造函数,产生了重载,编译器根据构造函数的参数的类型和个数决定调用哪一个。
      

  9.   

    建议楼主先看浅显的书,如java核心技术I
      

  10.   

    to  EverythingMaster:你说的意思我明白。
    顺便问个问题,这里的编译器指的是啥?我觉得有点抽象啊,不大明白
      

  11.   

    我也来学习一下,呵呵
    大家讨论地不错,看有没有什么新的想法
    我主要是想知道编译java文件到class文件的过程细节
    如果只是说编译成二进制文件,那这谁都知道,不知道有没有大侠对这个所谓的二进制文件有什么想法。
      

  12.   

    javac就是编译器
    我个人觉得编译过程和jvm无关。
    只有解释和执行class文件的时候才和jvm挂上钩
      

  13.   

    to jFresH_MaN():
    嘿嘿,那你得去问问那个神奇的编译器都干了些什么喽!
      

  14.   

    to jFresH_MaN():
    那这句话“由于构造函数是由编译器调用的,因此编译器必须要知道能调用哪个方法.

    怎么解释啊?javac调用构造函数?分配内存?
      

  15.   

    猪啊.这也要问吗?.class文件是字节码,java虚拟机就是执行这个的.他不是象exe那样的可执行文件,没有虚拟机就执行不了.