日期:2014-05-20  浏览次数:20693 次

java的跨平台到底是什么意思?
看了很多介绍java的书,书上往往都说java的目的是使程序能在不同的平台上跑。但仔细一看,又说需要在每个平台上运行一个相应的虚拟机。那么
c语言:代码->不同的平台用不同的编译器->运行。
java: 代码 -> 不同的平台用不同的虚拟机  ->运行。
既然这样和C语言的跨平台运行有什么区别吗?
是不是为一个新平台制作一个虚拟机比制作一个编译器容易?

------解决方案--------------------
c语言给了程序员太多的权力,你阻止不了通过c语言来进行系统调用,所以除非特意写成可移植的c程序,否则一般跨不了平台.
而java语言则不同了,无论你写什么样的程序(jni除外),都需要经过虚拟机解释执行,因此是跨平台的
------解决方案--------------------
java的跨平台,是指java运行时候凌驾于os之上,是在jvm中运行的,跟os没有直接联系。


如果有机会写数据导入导出,和服务器之间交互的应用,就会知道“跨平台”有什么意义了。 

在java之前,跨平台是很痛苦的事情,主要是因为所有对于系统的调用,在不同的操作系统下结果都不一样,简单的来说,int的长度在不同操作系统里面就不一样,甚至于连字节排列的顺序都不同。调用同一个函数返回的格式也不同,因此,写程序的人自己要对不同的系统非常了解,如果真的需要对不同操作系统进行兼容,要在程序里面写很多if,编译的时候要先判断使用的操作系统,创造很多环境变量才能编译,而且编译好的二进制可执行文件只能在本系统上运行。如果你写的是个功能库供别人调用的,那么光对操作系统的判断就占了代码的绝大部分,而且,还要你在不同平台下进行测试,这可是个艰苦卓绝的工作。建议你有空可以看看apache httpd服务器的源代码就知道了。 

自从有了java之后,就把操作系统兼容的工作丢给了jvm了,对于程序员来说就再也不要关心int有几位,还有高位在前还是地位在前的问题了,你只要用java的代码把你程序的逻辑实现出来就可以了,这些兼容的问题就交给jvm去处理吧。这样,如果你写一个程序交付给客户使用,如果客户的环境是运行AIX的,你就不需要在本地也装一个AIX来开发和运行,你可以在windows上完成所有的开发,然后把编译好的文件交给客户就可以了,以后有别的客户需要在Solaris上运行这个程序,你都不用修改,直接拿过去就可以运行,这难道不是一种方便吗?只有被跨平台开发折磨过的人才能更深得体会到用java开发跨平台应用的优势。

------解决方案--------------------
java跨平台主要是java编译方式决定的,因为java他是通过jvm java虚拟机先编译在执行,他编译的class文件是底层的实现不是针对操作系统的,所有什么操作系统并不影响java代码的执行。
------解决方案--------------------
java的跨平台性是指java编写的程序能在多个操作系统上运行,因为它的实际运行是靠虚拟机与操作系统无关,而C语言没有跨平台性是因为它只能在Windows操作系统上运行,因为Windows上有了识别C语言的程序。
------解决方案--------------------
JAVA夸平台是说我们程序员只要管写程序架构算法,不用管你这程序是在什么系统运行的。因为不同系统有不同的系统api(理解成一些可以控制计算机的函数吧,比如显示图像什么的),就是说你在不同系统上写的程序会不一样的,但是java是夸平台的,同样的程序在什么系统都能跑。JAVA能夸平台是因为java是运行在JVM虚拟机上的,JVM解决了平台的不一性(这说明JVM是每个平台不一样的,是针对平台写的),我门写的JAVA代码交给JVM翻译,它翻译成本地机器码,所以说JAVA是夸平台,但是JVM不是跨平台