java的跨平台到底是什么意思?

千树之影 2012-05-15 05:33:29
看了很多介绍java的书,书上往往都说java的目的是使程序能在不同的平台上跑。但仔细一看,又说需要在每个平台上运行一个相应的虚拟机。那么
c语言:代码->不同的平台用不同的编译器->运行。
java: 代码 -> 不同的平台用不同的虚拟机 ->运行。
既然这样和C语言的跨平台运行有什么区别吗?
是不是为一个新平台制作一个虚拟机比制作一个编译器容易?
...全文
808 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinyifeng222 2013-12-15
  • 打赏
  • 举报
回复
楼上认为6楼就很清楚了?我认为2、3楼才比较清楚,你说一堆什么jvm class不针对操作系统什么的,那我也可以说C语言可以通过不同的编译器去面对不同的操作系统!
zhengqiqiqinqin 2012-05-15
  • 打赏
  • 举报
回复
我认为6楼的:
java跨平台主要是java编译方式决定的,因为java他是通过jvm java虚拟机先编译在执行,他编译的class文件是底层的实现不是针对操作系统的,所有什么操作系统并不影响java代码的执行。
解释的很清楚了~~~
未来纪元 2012-05-15
  • 打赏
  • 举报
回复
通过jvm,编译一次java程序,可以在每台有jvm的计算机上运行
szx0704 2012-05-15
  • 打赏
  • 举报
回复
java。。。一次编写,到处运行。。。。。只需要写一次,到任何平台都不需要再写了。而c语言却无法这样。。。
zwnylsf 2012-05-15
  • 打赏
  • 举报
回复
class文件跨平台,jvm跨不了平台,你写java你就跨平台,反正jvm你不用管
yousun4688 2012-05-15
  • 打赏
  • 举报
回复
一次编程,可以再不同操作系统上运行
Norfloxacin 2012-05-15
  • 打赏
  • 举报
回复
JAVA夸平台是说我们程序员只要管写程序架构算法,不用管你这程序是在什么系统运行的。因为不同系统有不同的系统api(理解成一些可以控制计算机的函数吧,比如显示图像什么的),就是说你在不同系统上写的程序会不一样的,但是java是夸平台的,同样的程序在什么系统都能跑。JAVA能夸平台是因为java是运行在JVM虚拟机上的,JVM解决了平台的不一性(这说明JVM是每个平台不一样的,是针对平台写的),我门写的JAVA代码交给JVM翻译,它翻译成本地机器码,所以说JAVA是夸平台,但是JVM不是跨平台
peacerenxiaoming 2012-05-15
  • 打赏
  • 举报
回复
java的跨平台性是指java编写的程序能在多个操作系统上运行,因为它的实际运行是靠虚拟机与操作系统无关,而C语言没有跨平台性是因为它只能在Windows操作系统上运行,因为Windows上有了识别C语言的程序。
无星的夜空 2012-05-15
  • 打赏
  • 举报
回复
java跨平台主要是java编译方式决定的,因为java他是通过jvm java虚拟机先编译在执行,他编译的class文件是底层的实现不是针对操作系统的,所有什么操作系统并不影响java代码的执行。
allan_chan 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
java的跨平台,是指java运行时候凌驾于os之上,是在jvm中运行的,跟os没有直接联系。


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

在java之前,跨平台是很痛苦的事情,主要是因为所有对于系统的调用,在不同的操作系统下结果都不一样,简单的来说,int的长度在不同操作系统里面就不一样,甚至于连字节排列的顺序都不同。调用同一个函数返回的……
[/Quote]
说的很详细
BadPattern 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

java的跨平台,是指java运行时候凌驾于os之上,是在jvm中运行的,跟os没有直接联系。


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

在java之前,跨平台是很痛苦的事情,主要是因为所有对于系统的调用,在不同的操作系统下结果都不一样,简单的来说,int的长度在不同操作系统里面就不一样,甚至于连字节排列的顺序都不同。调用同一个函数返回……
[/Quote]
说的很好
昨日凡阳 2012-05-15
  • 打赏
  • 举报
回复
java的跨平台,是指java运行时候凌驾于os之上,是在jvm中运行的,跟os没有直接联系。


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

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

自从有了java之后,就把操作系统兼容的工作丢给了jvm了,对于程序员来说就再也不要关心int有几位,还有高位在前还是地位在前的问题了,你只要用java的代码把你程序的逻辑实现出来就可以了,这些兼容的问题就交给jvm去处理吧。这样,如果你写一个程序交付给客户使用,如果客户的环境是运行AIX的,你就不需要在本地也装一个AIX来开发和运行,你可以在windows上完成所有的开发,然后把编译好的文件交给客户就可以了,以后有别的客户需要在Solaris上运行这个程序,你都不用修改,直接拿过去就可以运行,这难道不是一种方便吗?只有被跨平台开发折磨过的人才能更深得体会到用java开发跨平台应用的优势。
BadPattern 2012-05-15
  • 打赏
  • 举报
回复
意思就是java的跨平台交给虚拟机来完成了,而c语言的编译器却搞不定跨平台(系统调用,基于某种编译器的语法,某些特定的库函数,基于某个特定字长的cpu编写程序等)
BadPattern 2012-05-15
  • 打赏
  • 举报
回复
c语言给了程序员太多的权力,你阻止不了通过c语言来进行系统调用,所以除非特意写成可移植的c程序,否则一般跨不了平台.
而java语言则不同了,无论你写什么样的程序(jni除外),都需要经过虚拟机解释执行,因此是跨平台的

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧