我现在很想大概了解JAVA的运行过程,C和JAVA运行时都要编译,但JAVA运行时需要虚拟机,而C在运行时是不是只要在用C写的操作系统上都能运行?对这些很迷惑,而且JAVA和C编译前后的内容和格式都是怎么样的?是不是它们编译后磁盘上存的都是二进制文件吗?

解决方案 »

  1.   

    java 
    编译前是:.java;
    编译前是: .class;
      

  2.   

    java编译后的文件是字节码文件,参考一下:
    http://blog.csdn.net/BU_BetterYou/archive/2008/06/16/2553108.aspx
      

  3.   


    http://hi.baidu.com/%B8%DF%D4%AD%C0%C7%C8%CB/blog/item/34107434f71e514a251f144c.html
      

  4.   

    只要有jre
     java程序就可以运行
      

  5.   

    Java源文件 是以后缀.Java存在   经过编译后变成.class的字节码文件   然后由JVM来解释执行  
        我也新手  刚看到的 不知对你有没有用
      

  6.   

    楼主问的这个感觉我想都不敢想,这是我在网上找的,感觉说的很好,在JVM中,所有字节码都是通过一个基本的原则来进行堆栈操作的:每个操作符可能会消费一个或多个操作计数,并可能最后将一个操作计数推送到执行堆栈。需要注意的是,每个分片(slot)都是32位的,这就意味着long或者是double的值会消耗两个分片(slot)(很多人认为这个是JVM实现中的最大缺憾)。另外,每个方法都会有一个本地的结合,本地变量和参数都在此保存。因此,例如“aload_0”指示符将第一个参数带入方法,并将其推送至执行堆栈。“invokespecial”指示符,不言而喻,它将调用实例的方法,但是忽略传统的动态绑定(因为我们显示调用基类版本的覆盖方法,该特殊的操作符用在父“super”调用)。因为Object的构造函数需要一个参数(this指针),所以它将消耗执行堆栈中的一个分片(记住,这是我们刚才推送的参数——this指针,指向我们自己的实例的this指针),而且它不返回任何值(最后有一个V字),当方法返回时它将不往堆栈内推送任何内容。
      

  7.   

    java的编译是变成字节码,字节码被虚拟机执行,才是机器码。比C多一个步骤。