标题 ##Java的“跨平台”特性
言下之意,C、C++是不具备“跨平台”特性的(严格来说,也不是这么回事)。那为什么呢?想想。
先解释一下: “跨平台”。这里的“平台”就是指我们常用的操作系统,如Windows/Linux/Mac。“跨平台”就是指能在不同的平台上使用。
Java“跨平台”特性的实现原理如下:.java文件,经过Java编译器编译,形成字节码文件——.class,这种.class文件可以运行在JVM上,而JVM可以被安装到不同的平台,这就带来了Java的跨平台特性。
应当说明的是:.class文件这种字节码文件,基于Unicode的字节码是不依赖于特定的计算机硬件架构,不是严格的二进制文件,而.cpp文件经过C++编译器编译后,形成的.obj文件,是一种纯二进制的机器指令。
其实Java、C/C++都是具有跨平台的特性,需要看这个“跨平台”,你如何理解?
C/C++语言本身是跨平台的,这是从“源码编译”的角度来看,但其应用程序.exe不是。比如:你的C/C++程序只使用C标准的输入输出,那么源代码也是跨平台的,只要用对应平台的编译器编译就可以运行,如果你使用了平台专有的API,那么它就不能跨平台,比如WINDOWS窗口程序,就调用了WINDOWS的创建窗口,显示窗口等API(这些调用并不一定在你自己的代码中),Linux是没有这些API的,所以就无法编译更无法运行。标准的C/C++本身都是硬件无关的,但是标准C/C++往往不够用, 于是一些人就会直接用Linux或windows的C/C++接口,这样做不符合现代设计模式,导致程序脆弱,跨平台就更别提了,正确的做法应当是用C/C++调用跨平台库,由跨平台库承担处理平台差异的细节。
C++创始人曾经这样说:“JVM造了一个新的平台,让所有Java程序只能在这个平台上运行,而C和C++的代码可以在几十个不同的平台上运行,从这个角度而言,C和C++是才是真的跨平台的,而Java不是。”当然,你也可以认为,Java的确只是在其唯一的平台上——JVM上运行的。
正所谓:C语言是“一次编写,到处编译”;Java是“一次编译,到处运行”。
注:以上说得有点乱,其实大部分都是自己整合别人的经验而来,主要是自己理解不够的原因,目的是为了通俗地说明问题。