Java的平台无关性
一次编译,到处运行
这是Java的一大特点,只需要一次编译,就可以在多种机器、系统上运行,即跨平台运行,这是很多语言(如c、cpp)所不能达到的。
为什么有些语言不能跨平台?
首先我们需要了解语言的执行的流程:
语言 ----> 机器语言
所有的语言最终都会变成机器语言,因为cpu只能看懂机器语言,执行机器指令。
对于c,cpp等编译性语言,通过编译,将源代码一次性编译成机器指令。
由于不同的平台(CPU)所对于的机器指令可能不相同,因此每次 编译 后的机器指令只能应用于对应的机器。
因此不能跨平台。
为什么Java可以跨平台?
想要跨平台,那么我们需要到达这样的效果
但不同的机器平台所支持的机器码不同,而一次编译肯定只有一种结果,那么Java换了一个思维
将Java源码编译成统一的字节码文件,由Java虚拟机(Java Virtual Machine,JVM)实时解释执行,而不同平台有着不同版本的JVM,当执行Java程序时,由JVM解释字节码文件,转换成对应的机器语言。(随着JVM的发展,目前是解释+编译执行)。
由于Java程序运行时,是解释执行的,所以速度一般比编译性语言慢一些,不过随着JVM的发展,Java程序的运行已经逐步变成解释+编译,速度有了提高。
JVM运行的是字节码文件,因此运行的不一定非要是Java语言,只要满足JVM的字节码规范即可,JVM现在已支持多种语言,除了Java之外,还有如Kotlin、Groovy、Jython等等
因此Java是跨平台的,当然Java虚拟机(JVM)不能跨平台,不同的平台有不同版本的Java虚拟机。