Java为什么与平台无关

1、为什么

  我们都知道Java有一个特性,那就是与平台无关性,一次编译到处运行,那么这是怎么实现的呢?

  Java语言与其他语言相比,最大的优势就是编写的软件能在执行码上兼容,在所有的计算机上运行。Java之所以能做到这点,是因为Java可以在计算机的操作系统上再提供一个Java运行环境(Java Runtime Environment,JRE)。该运行环境由Java虚拟机(Java Virual Machine,JVM)、类库以及一些核心文件组成,也就是或,只要平台提供了Java运行环境,Java编写的软件就能再其上运行。

  与平台无关性,这里的平台指的是操作系统,每个平台都会有自己独特的机器指令,而高级语言都要编译成该平台的机器语言才能在该平台上运行,所以不同平台上的编译方法要不同,才能正确的在特定的机器(平台)上运行我们的程序。

  与平台无关系是指软件的运行不因操作系统、处理器的变化而无法运行或出现运行错误。

  Java虚拟机的核心是所谓的字节码指令,即可以被Java虚拟机直接识别、执行的一种由0、1构成的序列代码。字节码并不是机器指令,因为他不和特定的平台相关,不能被任何平台直接识别、执行。Java针对不同的平台提供的Java虚拟机的字节码指令都是相同的,例如,所有的虚拟机都将11110000 识别、执行为加法操作。

  和C/C++不同的是,Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编译,而是针对Java虚拟机把Java源文件编译成称为字节码的 “中间代码”,例如Java源文件中的+被编译成字节码指令11110000.字节码是可以被Java虚拟机识别、执行的代码,即Java虚拟机复负责解释运行字节码,其原理是:Java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,并让当前平台运行该机器码,如图:
Java为什么与平台无关_第1张图片
  在一个计算机上编译得到的字节码文件可以复制到任何一个安装了Java运行环境的计算机上直接使用。字节码由Java虚拟机解释运行,即Java虚拟机负责将字节码翻译成本地计算机的机器码,并将机器码交给本地的操作系统执行。

2、总结

  一句话总结就是:Java的编译器将Java源文件编译为Jvm的字节码之后,Jvm再将字节码翻译为虚拟机所在的平台的机器码。

  以.java结尾的叫Java源文件,.class结尾的叫字节码文件,源文件中有几个类,字节码就生成几个.class文件(内部类不算)。Java中的main类称为启动类或者主类,Java程序总数从主类开始执行,过程如图:
Java为什么与平台无关_第2张图片
内容参考自(清华大学 J2使用教程),若侵权,请联系我删除

你可能感兴趣的:(Java基础知识,java)