分类：电脑/网络-程序设计-JAVA相关
问题：JAVA和C++有什么不同，JAVA可以代替C语言吗？ 
回答：Java，是一种可以编写跨平台应用的面向对象的程序设计语言，由升阳（太阳微电子，Sun Microsystems）公司的詹姆斯·高斯林（James Gosling）等人于1990年代初开发。它最初被命名为Oak，作为一种小家用电器的编程语言，用于解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高，Sun放弃了该项计划。就在Oak几近失?≈保孀臝nternet的发展，Sun看到了Oak在计算机网络上的广阔应用前景，于是改造了Oak，在1995年5月以“Java”的名称正式发布了。Java伴随着Internet的迅猛发展而发展，逐渐成为重要的Internet编程语言。Java编程语言的风格十分接近C++语言。Java继承了C++语言面向对象技术的核心，舍弃了C++语言中容易引起错误的指针（以引用取代）、运算符重载、多重继承（以接口取代）等成分，增加了自动垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。在J2SE1.5版本中Java又引入了泛型编程（Generic Programming）、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。Java不同於一般的编??绦杏?算?C語言和解释执行计算机语言。它首先将源代码编译成字节码，然后依赖各种不同平台上的虚拟机来解释执行字节码，从而实现了“一次编译、到处执行”的跨平台特性。不过，这同时也在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后，Java的计算能力有了大幅提升。与传统程序不同，Sun公司在推出Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一，并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Sun公司对Java编程语言的解释是：Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。Java平台是基于Java语言的平台。这样的平台目前非常流行，因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。在流行几年之后，Java在浏览器中的地位被逐步侵蚀。它在简单交互性动画方面的用途已经完全被Macromedia公司的Flash排挤，2005年Java倾向只被用于雅虎游戏那样的更为复杂的应用程序。Java同时遭受到来自微软的反对，他们决定在新版本的Internet Explorer和Windows中不再附带Java平台。与此相反。在万维网的服务端和手持设备上，Java变得更加流行。很多网站在前端使用JSP和其他的Java技术。在桌面系统上，独立的Java程序还是相对少见，这是因为Java平台的运行开销较大，而许多人的电脑上没有安装Java，由于网络带宽在以前较小，下载Java曾经是个耗时的事情。但是随着计算机计算能力、网络带宽在10年中取得了很大的进步，同时虚拟机和编译器的质量得到了越高，许多应用程序得到了广泛的使用，包括:开源软件:NetBeans Eclipse JEdit Azureus BitTorrent客户端。 JNode操作系统 闭源软件:EIOffice(永中Office) 纯Java 3D游戏合金战士Chrome 还有许多用Java写的软件，可以在   找到。 在以下网页可以看到非常多用Java写的程序：   下面有大量用Java Swing开发的桌面Java程序   目前Java提供以下三个版本：Java Platform, Enterprise Edition (Java EE：Java平台企业版) Java Platform, Standard Edition (Java SE：Java平台标准版) Java Platform, Micro Edition (Java ME：Java平台微型版) 语言特性Java之所以被开发，是要达到以下五个目的：应当使用面向对象程序设计方法学 应当允许同一程序在不同的计算机平台执行 应当包括内建的对计算机网络的支持 应当被设计成安全地执行远端代码 应当易于使用，并借鉴以前那些面向对象语言（如C++）的长处。 Java技术主要分成几个部分：Java语言、运行环境JVM、类库。一般情况下说Java时并不区分指的是哪个部分。 面向对象Java的特点之一就是面向对象，是程序设计方法的一种。“面向对象程序设计语言”的核心之一就是开发者在设计软件的时候可以使用自定义的类型和关联操作。代码和数据的实际集合体叫做“对象”。一个对象可以想象成绑定了很多“行为（代码）”和“状态（数据）”的物体。对于数据结构的改变需要和代码进行通信然后操作，反之亦然。面向对象设计让大型软件工程的计划和设计变得更容易管理，能增强工程的健康度，减少失败工程的数量。面向对象设计另外一个目标就是能产生很多的有关联的类，可以让软件的再开发变得简单。举例来说，很多软件工程都有同样的功能，尤其是很多应用了同一原理组织的软件工程。软件的二次开发者想自己为软件开发插件以增强功能的时候，绝对不想看到混乱的开发代码和管理计划。面向对象的目的就是不生產难懂且难以使用的代码，为软件各个功能群之间建立有效的通信通道。很多开源软件社区正在计划给软件作者提供更多的类来让软件的二次开发变得简便。 平台无关性 一个Java软件的界面，在所有系统下面都可以运行这个程序Java语言的第二个特性就是平台无关性，也就是说使用Java语言编写的程序可以在编译后不用经过任何更改，就能在任何硬件设备条件下运行。这个特性经常被称为“一次编译，到处运行”。实现平台无关性的方法是大多数编译器在进行Java语言程序的编码时候会生成一个用字节码写成的“半成品”，这个“半成品”会在Java虚拟机（解释层）的帮助下运行，虚拟机会把它转换成当前所处硬件平台的原始代码。之后，Java虚拟机会打开标准库，进行数据（图片、线程和网络）的存取工作。主要注意的是，尽管已经存在一个进行代码翻译的解释层，有些时候Java的字节码代码还是会被JIT编译器进行二次编译。有些编译器，比如GCJ，可以自动生成原始代码而不需要解释层。但是这些编译器所生成的代码只能应用于特定平台。并且GCJ目前只支持部分的Java API。升阳对于Java的许可是“全兼容的”，这也导致了微软和升阳关于微软的程序不支持RMI和JNI接口、并且增加特性为己所用的法律争端。升阳最终赢得了官司，获得了大约两千万美元的赔偿，法院强制要求微软执行升阳公司关于Java的许可要求。作为回应，微软不再在Windows系统中捆绑Java，最新的Windows版本，Windows Vista和Internet Explorer 7.0版本也不再提供对于Java应用程序和控件的支持。但是升阳公司和其他使用Java运行时系统的公司对于微软的操作对用户提供无偿的第三方插件和程序支持。Java语言使用解释层最初是为了轻巧性。所以这些程序的运行效率比C语言和C++要低很多，用户也对此颇有微词。很多最近的调查显示Java的程序运行速度比几年前要高出许多，有些同样功能的程序的效率甚至超过了C++和C语言编写的程序。Java语言在最开始应用的时候是没有解释层的，所有需要编译的代码都直接转换成机器的原始代码。这样做的后果就是获得了最佳的性能，但是程序臃肿异常。从JIT技术开始，Java的程序都经过一次转换之后才变成机器码。很多老牌的第三方虚拟机都使用一种叫做“动态编译”的技术，也就是说虚拟机实时监测和分析程序的运行行为，同时选择性地对程序所需要的部分进行编译和优化。所有这些技术都改善了代码的运行速度，但是又不会让程序的体积变得失常。程序的轻便性事实上是软件编写很难达到的一个目标，Java虽然成功地实现了“一次编译，到处运行”，但是由于平台和平台之间的差异，所编写的程序在转换代码的时候难免会出现微小的、不可察觉的错误和意外。有些程序员对此非常头疼，他们嘲笑Java的程序不是“一次编译，到处运行”，而是“一次编译，到处调试”。平台无关性让Java在服务器端软件领域非常成功。很多服务器端软件都使用Java或相关技术建立。