1.什么是平台无关性
平台性是指一种语言在计算机上的运行不受平台的约束,一次编译,到处执行。 有两种:源代码级和目标代码级。而C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。而Java编译出来的是字节码,到哪个平台都能用,只要有那个平台的JDK就可以运行,所以,Java程序的最大优势就是平台无关性。
2.Java的平台无关性是怎么实现的
谈论Java的平台无关性,就要先了解Java是如何运行的。在计算机中其实真正执行的是由0和1组成的二进制文件。而我们通常开发使用的C、C++、Java等都是高级语言。如果要让计算机识别Java代码,就需要把它“翻译”成二进制文件。这个过程称为编译。执行这一过程的工具叫编译器。在Java中,要把Java代码编译成二进制文件,需要进过前端编译和后端编译两步。
前端编译主要指和源语言有关但与目标机无关的部分。比如我们熟知的javac。以及eclipse、idea等IDE中内置的前端编译器。都是为了把.java代码转换为.class字节码。
后端编译就是将中间代码翻译成机器语言。Java中的这一步骤由虚拟机执行。所以,Java虽然是平台无关的,但是虚拟机(JVM)却是平台相关的,不同操作系统需要对应的JVM。我们可以从[orale官网](https://www.oracle.com/java/technologies/javase-jdk14-downloads.html)取得对应的安装版本,如下图
![827b07ef3bbd88d64dc925ef9bf9ca66.png](https://i-blog.csdnimg.cn/blog_migrate/ced40d385f164ed9a367f9457f532ae4.jpeg)
简而言之,Java的平台无关性实现如下图
![9c1304bf27adc8d2e27008af4bf67206.png](https://i-blog.csdnimg.cn/blog_migrate/405be3253a0b029bc70bb97dc92fa3cb.jpeg)
3.有了虚拟机就能实现平台无关性了吗
上面我们提到,Java通过虚拟机在不同的平台将Class文件翻译成对应的二进制文件。其实还有一位重要主演就是Java语言规范。Java的语言规范,保证了基本数据类型的一致,为Java的平台无关性提供了强力保障。举一个简单的例子,对于int类型,在Java中,int占4个字节,这是固定的。但是在C++中却不是固定的。所以,在不同的平台中,对于同一个C++程序的编译结果会出现不同的行为。
4.JVM还支持哪些语言
除了Java之外,其实JVM还可以支持一大批语言,比如Kotlin、Groovy、JRuby、Jython、Scala等
## 附言
* 转载请注明出处