java跨平台是因为它们被编译成字节代码,字节代码与平台无关,你只要在该平台安装了能解释这些代码的环境即可,即jre。java程序就能运行了。基本原理就是这个。

解决方案 »

  1.   

    不同的操作系统有不同的JVM,就是通过JVM来运行class文件已达到跨平台的目的。
    想了解细节最好看一下《java虚拟机规范》及《编译原理》等。
    想更深入了解它的原理,问James Gosling吧,呵呵。
      

  2.   

    通常的编译器编译成二进制代码,可以在机器上直接运行,而java编译器把源代码编译成中间代码,通过虚拟机来执行。和系统没有关系(从用户的角度上来看),从而达到了跨平台。从调用的层次上来说通常的c程序执行是:c源程序通过c语言编译器-》二进制代码-》操作系统。而java源程序通过java编译器-》中间代码-》java虚拟机-》操作系统。也就是在中间增加了java虚拟机层。所以可以在不同的平台上来实现,平台的差异通过虚拟机来管理。更深入和复杂的可以参看楼上给出的书目
      

  3.   

    其实最核心的原理是,你可以把jvm看做一台电脑+操作系统的组合,.class就是可被机器执行文件,里面有各种指令;你可以认为jvm+class的组合和cpu+winOS/otherOS+bin是一样的
      

  4.   

    那就是说Java在源码与二进制码之间加了一层,
    这就是它的跨平台的本质吗?
      

  5.   

    那不同的操作系统平台就需要用不同的Java虚拟机了?
      

  6.   

    .NET中微软中间语言是不是仿造Java 的字节码设计出来的?
    其本质差别在哪呢?
      

  7.   

    简单来讲,针对不同操作系统或硬件写好不同的Java虚拟机(或JRE),但有一点他们能解析相同格式的class Bytecode,所以就跨平台了。因此有人就说:Java不是跨平台(如真正的跨平台的C也得作数据类型上的调整),它本身就是一个平台。