当前位置: 技术问答>java相关
Java的跨平台是不是说用Java写的程序代码不需要修改就可以在各种操作系统平台下运行?它与C++/C的跨平台有什么不同之处?
来源: 互联网 发布时间:2015-11-06
本文导语: Java的跨平台是不是说用Java写的程序代码不需要修改就可以在各种操作系统平台下运行?它与C++/C的跨平台有什么不同之处? | java代码不是直接运行在CPU上,而是运行在java虚机(简称JVM)上的...
Java的跨平台是不是说用Java写的程序代码不需要修改就可以在各种操作系统平台下运行?它与C++/C的跨平台有什么不同之处?
|
java代码不是直接运行在CPU上,而是运行在java虚机(简称JVM)上的。
java是先把java文件编译成二进制字节码的class文件,jvm就解释执行class文件。
就是因为java是运行在jvm上的,所以它的代码就能不经修改,就能在不同平台的jvm上运行(在UNIX用UNIX的jvm,在linux上用linux的jvm,在windows上用windows的jvm)
假如用windows移植到UNIX,只需把java文件是UNIX的jvm上编译成class文件,然后用jvm运行就可以了.
c++,c就不能跨平台,因为它是直接运行在CPU上的。
而且各个操作系统的API不一样,所以要移植,必需大幅修改代码,使它能调用新操作系统的API。
例如一个hello world程序
在dos下,我们可以这样写:
#include iostream.h
void main()
{
coutUpdateWindow();
}
BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)
WM_ON_PAINT()
END_MESSAGE_MAP()
CMainFrame::CMainFrame()
{
Create("frame",true); }
void CMainFrame::paint(CDC *dc)
{
dc->TextOut("Hello world");
}
这是一个最简单的c++windows程序
你看它跟在dos下的很不一样。(也许我这样举例不太恰当)
如果在UNIX,Linux下的话,那就更不一样了。
但java呢,
要实现这种功能,在所有平台都是这样写
#include java.lang.*;
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
代码不用修改,能在所有平台上运行,这就是java的跨平台的表现。
java的类库是用c写成的,它取所有操作系统API的共公用部分,
所以它能一写编写随处运行。
java是先把java文件编译成二进制字节码的class文件,jvm就解释执行class文件。
就是因为java是运行在jvm上的,所以它的代码就能不经修改,就能在不同平台的jvm上运行(在UNIX用UNIX的jvm,在linux上用linux的jvm,在windows上用windows的jvm)
假如用windows移植到UNIX,只需把java文件是UNIX的jvm上编译成class文件,然后用jvm运行就可以了.
c++,c就不能跨平台,因为它是直接运行在CPU上的。
而且各个操作系统的API不一样,所以要移植,必需大幅修改代码,使它能调用新操作系统的API。
例如一个hello world程序
在dos下,我们可以这样写:
#include iostream.h
void main()
{
coutUpdateWindow();
}
BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)
WM_ON_PAINT()
END_MESSAGE_MAP()
CMainFrame::CMainFrame()
{
Create("frame",true); }
void CMainFrame::paint(CDC *dc)
{
dc->TextOut("Hello world");
}
这是一个最简单的c++windows程序
你看它跟在dos下的很不一样。(也许我这样举例不太恰当)
如果在UNIX,Linux下的话,那就更不一样了。
但java呢,
要实现这种功能,在所有平台都是这样写
#include java.lang.*;
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
代码不用修改,能在所有平台上运行,这就是java的跨平台的表现。
java的类库是用c写成的,它取所有操作系统API的共公用部分,
所以它能一写编写随处运行。
|
java用的是虚拟机掩盖了平台的不同,所有的代码都要在虚拟机上才能运行,即所谓的"一次编译到处运行".C++的跨平台有些麻烦,如果不上象.net那样有虚拟机的存在在一些代码上可能就要使用编译器的预先处理功能.,也就是依靠一堆的#if,#else...C++的方式应该是"一次编写到处编译".其实进行一般的编程可以用C++的类库屏蔽调平台的相关性.现在的很多类库都是可以跨平台运行的,比如Boost,ACETAO...类库本身对不同的平台进行了相应的处理.不过在你编程的时侯就需要注意不能使用一些平台的专有特性,比如Windows的注册表.我认为在C++的标准不断完善以及类库的不断完善,应该能容易的写出跨平台的C++的程序.应该客观的说C++所跨的平台比java还多(有些平台java根本就没有虚拟机,但是一般的平台都存在C++的编译程序)
|
Java和C#相比没什么意义
其实我感觉所谓的跨平台还是用不能跨平台的运行环境来执行所谓的“跨平台”程序,Java和C#都是这个样
其实我感觉所谓的跨平台还是用不能跨平台的运行环境来执行所谓的“跨平台”程序,Java和C#都是这个样
|
C++的跨平台是源代码的扩平台性(当然前提是你没有调用平台相关的API)
java的跨平台性是指“一次编译到处执行”
java的跨平台性是指“一次编译到处执行”
|
楼上说得对,C++的跨平台并不严格,因为源码在不同平台上编译,要做少量的修改。
java的跨平台是比较完整的。
java的跨平台是比较完整的。
|
对于java和C#来比较,可以说各有好处,
C#在语法和资源上要比JAVA完善,后来居上是很正常的.
但是Java的独立性要比C#好得多啊.
.net大而全, 可是背后是有基础的.大而全只是表面现象罢了.
就好像intel 的cisc 还不是只是在risc上的一层包装.
------------------------------------例子举的不当:)
C#在语法和资源上要比JAVA完善,后来居上是很正常的.
但是Java的独立性要比C#好得多啊.
.net大而全, 可是背后是有基础的.大而全只是表面现象罢了.
就好像intel 的cisc 还不是只是在risc上的一层包装.
------------------------------------例子举的不当:)