摘 要:Java和C++都是目前被广泛使用面向对象的程序设计语言,它们都有着强大的功能和众多的使用者。本文分别从Java和C++的技术背景、语言特性和差异三方面展开讨论,为编程人员能够更好的实现自身需求提供参考。
关键词:Java;C++;面向对象
C++和Java是当前主流的面向对象的程序设计语言。C++是编译型高级语言而Java是解释型的高级语言。因为Java是从C++衍生出来的,所以两种语言在基本语法和概念上都有很多相似之处,然而它们之间也存在一些不可忽视的差异。对这两种语言进行了解、分析和区别,不仅有助于编程人员对它们的特点和应用有所把握,而且可以根据它们各自的优劣在编程时有所选择,更好地实现自身的需求。
一、技术背景
1、Java的技术背景
Java诞生于1995年,是由Sun Microsystems公司组织开发的一种可移植的、跨平台的编程语言,该语言能生成正确运行于各种操作系统、各种CPU芯片上的代码。Java的发展得利于Internet和Web的发展,Internet上有各种不同的计算机,它们可能使用完全不同的操作系统和CPU芯片,但仍希望运行相同的程序,而Java的出现则解决了这个问题,使得Web漫游在数百万的计算机用户间变得极为流行,使得web用户能够进行交互式的、只需考虑所使用的软硬件平台即可执行的、能够访问多种网络而不会把病毒传播给多种网络计算机。JAVA标志着真正分布式系统的到来。
2、C++的技术背景
C++是早在80年代由美国AT&T贝尔实验室的Bjarne Stroustrup在C语言基础上推出的程序设计语言。最初的动机是打算在效率上改进Simula 67语言并采用复杂事件驱动。1983年,C++首次推广到外界,但C++语言的标准化工作是从1989年开始的,提出了把数据和在数据之上的操作封装在一起的类、对象和方法的机制,还有派生、继承、重载和多态性等特征。
二、语言特性
1、Java的语言特性
Java是一种优秀的编程语言,它具有以下特点:简单、面向对象、分布式、健壮、结构中立、安全、高性能、多线程等特性。
2、C++的语言特性
C++是从C语言发展起来的,其特点中就包含了对C的一些特性的改进:注解、枚举名、结构名或者类名、分程序声明、匿名联合、显式类型转换、函数重载、缺省的函数参数值、inline说明符,除此之外, 在面向对象方面有了很大的增强:类构造和数据封装性、Struct类、构造方法和析构方法、消息、友元、运算符重载、派生类、使用虚函数的多态性等特性。
三、Java与C++的差异
1、跨平台性:Java是纯面向对象的语言,其最大的特色""write once,run anywhere""。C++可以使用纯过程化的编程,也可以是基于对象的编程,还可以是面向对象的编程,当然大部分是混合编程;所以C++也可以跨平台,但是没有Java的特点更显著。
2、数据类型:Java的所有函数和变量都必须是类的一部分。除了基本数据类型(boolean、byte、short、int、long、float、double、char)之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。C++除了有这样的基本数据类型之外,还有结构、联合、枚举。
3、字符串:C++不支持字符串变量,在C++程序中使用NULL终止符代表字符串的结束而在Java中字符串是用类对象(String和StringBuffer)来实现的,这些类对象是Java语言的核心
4、类型转换:在C++中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。而Java不支持C++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
5、sizeof操作符:在C++中,当我们想知道一个对象或者一个原始数据类型所占用的内存大小时,只需简单调用sizeof操作符即可。但在Java中是没有相应的操作符或者方法来直接完成相应的功能。
6、内存管理:Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于C++的new操作符。下面的语句由一个建立了一个类Write的对象,然后调用该对象的write方法:Write w=new Write();w.write();语句Write w=new Write();在堆栈结构上建立了一个Write的实例。Java自动进行无用内存回收操作,不需要程序员进行删除。
7、预处理:Java不支持预处理功能。C++在编译过程中都有一个预编译阶段——预处理器。预处理器为开发人员提供了方便同时也增加了编译的复杂性。Java虚拟机没有预处理器,但它提供的引入语句(import)与C++预处理器的功能类似。
8、跳转语句:goto语句是C和C++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,语句主要用于无条件转移子程序和多结构分支技术。虽然Java指定goto作为关键字,但不提供它的使用,使程序简洁易读。
四、总结
虽然Java与C++有以上的区别,但本质上几乎是相同的。Java语言的对象模型几乎就是C++对象模型的简化版,C++完全兼容C语言又提供所有的面向对象特性所以使它的结构变得特别复杂。Java是在C++的基础上开发出来的,比C++简化很多,也容易使用很多,但是在有些方面特别是泛型方面明显没有C++使用起来灵活。对于任何问题C++可以实现几乎所有的解决方法,程序员可以根据自己的需要来选择一种实现方法;而Java只提供一到两种实现方法。
参考文献:
[1]Bruce Eckel Thinking in Java(Third Edition)China Machine Press 2006.5
[2]何友鸣、方辉云C++语言程序设计科学出版社2001.6
[3]刘腾红、屈振新、任伟、刘勘Windows程序设计技术清华大学出版社2004.10