当前位置:  技术问答>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用的是虚拟机掩盖了平台的不同,所有的代码都要在虚拟机上才能运行,即所谓的"一次编译到处运行".C++的跨平台有些麻烦,如果不上象.net那样有虚拟机的存在在一些代码上可能就要使用编译器的预先处理功能.,也就是依靠一堆的#if,#else...C++的方式应该是"一次编写到处编译".其实进行一般的编程可以用C++的类库屏蔽调平台的相关性.现在的很多类库都是可以跨平台运行的,比如Boost,ACETAO...类库本身对不同的平台进行了相应的处理.不过在你编程的时侯就需要注意不能使用一些平台的专有特性,比如Windows的注册表.我认为在C++的标准不断完善以及类库的不断完善,应该能容易的写出跨平台的C++的程序.应该客观的说C++所跨的平台比java还多(有些平台java根本就没有虚拟机,但是一般的平台都存在C++的编译程序)

|
Java和C#相比没什么意义
其实我感觉所谓的跨平台还是用不能跨平台的运行环境来执行所谓的“跨平台”程序,Java和C#都是这个样

|
C++的跨平台是源代码的扩平台性(当然前提是你没有调用平台相关的API)
java的跨平台性是指“一次编译到处执行”

|
楼上说得对,C++的跨平台并不严格,因为源码在不同平台上编译,要做少量的修改。
java的跨平台是比较完整的。

|
对于java和C#来比较,可以说各有好处,
C#在语法和资源上要比JAVA完善,后来居上是很正常的.
但是Java的独立性要比C#好得多啊.
.net大而全, 可是背后是有基础的.大而全只是表面现象罢了.
就好像intel 的cisc 还不是只是在risc上的一层包装.
                ------------------------------------例子举的不当:)

    
 
 

您可能感兴趣的文章:

  • 有c#了java是不是没有前途了?我该不该学java?
  • linux下用java开发是不是JB就可以,JAVA在LINUX下开发有优势吧!
  • 听说WINDOWS XP不代JAVA虚拟机了,JAVA是不是要玩了
  • java是不是和c++差不多?
  • java 能做什么系统?CS是不是不行呀?开发效率岂不是很低
  • Red Hat 7.3 是不是不支持 java 了?
  • JAVA虚拟机是不是也要调用Windows的API?
  • 我已经完全安装了JDK1.3,但是我的IE是6.0办的,听说没有JAVA虚拟机,不知我的IE能不能运行JAVA程序?是不是一定要装IE6以下的?
  • JAVA编译是不是比较慢呀??
  • 急!!谁了解macintosh?能不能给我介绍介绍?是不是跟linux差不多?使用开发工具JDK,这是不是不JAVA?
  • 网络技术 iis7站长之家
  • PIIII机器是不是不能运行java啊??
  • 用com.sun.java.swing 里的japplet 代替 原来的applet是不是可以啊???
  • 请问jbuilder5是不是用java写的?
  • 请问学习JAVABEANS是不是就是学习java.beans.*类库??
  • java 中中文编码问题 是不是 与本地系统有关?
  • 没分:永中office是不是java应用开发的杰作,立即下载!一看究竟!
  • 初级问题,JAVA编译EJB不成功,不知道是不是path之类的问题,错误如下
  • 请问:什么是组合?看了THINGKING IN JAVA后,还是不是很明白
  • JAVA2是不是不适合个人开发,?
  • SecureCRT上运行一个JAVA程序,该程序类似一个在WINDOWS下一直运行的CMD窗口的东西,SecureCRT关掉后,JAVA还会继续运行吗?
  • 我用JBUILDER7。只有两三天,问:一个项目有一个welcomeapp.java ,还有一个是welcomappframe.java,请问那一是主表单,(即运行时,运行的
  • java显示当前运行时的参数(java运行参数)
  • java教程之java程序编译运行图解(java程序运行)
  • 谁知道为什么我的TextPad中没有编译Java、运行Application、运行Applet这三个选项????
  • 哪有jvm(java虚拟机)下载,为了让ie运行一些java程序!
  • linux环境下,java程序手工运行不乱码,crontab自动运行就乱码
  • 我想学java,那java的运行环境是什么?
  • 开发的java工程系统运行在linex上,现在想监控这个系统的运行情况
  • java初手,请问到那里下载java在ie下面的插件,让ie可以运行applet
  • 请问java编制的程序主要运行在服务器端还是客户端?听说它的速度比较慢,怎么可以运行在服务器端呢?谢谢!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3