Java和C的跨平台特性比较
如何理解Java的"跨平台"特性?
很多Java的初学者在初始Java这门语言时,总会见到**"跨平台"**这一概念。首先要了解的是:跨平台是Java最为突出的一个特性,但它
不是Java独有的,很多编程语言都能够实现跨平台。
例如现代高级语言的鼻祖:C,它也有跨平台的特性。
我们就跨平台这一特性,把Java与C作一比较
首先来了解一下何为"跨平台"
跨平台即不依赖操作系统,不依赖硬件环境,在某一操作系统下编写的代码源文件,放到另一操作系统上仍可以编译运行
那么怎么能够实现"跨平台"?
想要实现跨平台,需要解决两个问题:
**1.计算机只认识机器语言,即二进制语言,也就是0和1
2.不同操作系统的计算机,机器指令系统不同**
**思考一下怎么解决?**
第一个问题其实很容易想到:只要能够成功的把源代码转换为.class字节码文件,那么计算机就可以识别
而第二个问题如何理解?不同操作系统,那就例如Windows操作系统和MAC操作系统,他们对同一段二进制代码解释执行出的结果可能不同。
举个简单的例子,例如"1100"这段二进制代码,在Windows系统中解释执行出的结果是 "你吃饭了吗?",而在MAC中就可能是 "你睡觉
了吗?"
我们着重来看一下Java和C是如何解决第二个问题的
Java
Java在编译阶段是中规中矩的,而在解释执行阶段,Java提供了一个中间环境Java虚拟机JVM(Java Virtual Machine),Java编译产生的
.class字节码文件进入到JVM中解释执行,最后呈现在操作系统上,要注意的是,仅仅是呈现在操作系统上,.class文件的解释执行与操作系统
毫无关系。所以.class文件可以在任意装有JVM的操作系统上解释执行。即"一次编译,随处运行"。Java以此实现跨平台
C
而C的跨平台,简单粗暴,它的源文件在不同的操作系统上编译时,它会针对当前操作系统进行编译,然后执行。但是编译之后的字节码文件和
可执行文件拿到另一操作系统上就不能运行,就需要重新编译。即"多次编译,随处运行"
至此,总结一下:
C的源代码是跨平台的而编译后的目标文件和可执行文件就不是跨平台的,跨平台主要是靠各个平台上的编译器。
Java跨平台是建立在“虚拟机”的基础上的,通过JVM在程序运行时将.class文件解释执行,但是Java也因此受限于JVM,因为它的字节码文件
只能在装有JVM的系统上运行。(不是所有JVM都是相同的,Oracle官方给各种操作系统提供的有专门的JVM,但它们的接口相同)