Java的不断发展要归功于C、C++ 和C# 等编程语言的不断挑战。C++、C#和Java等编程语言基本上都来源于C语言但又有很多区别。业内人士经常将C比作爷爷,C++比做儿子,C# 和Java等语言比作孙子。
对于变量声明、参数传递、操作符、流控制等,Java使用了和C、C++、C# 相同的传统,而C++ 主要是对C的扩展并融入了面向对象的思想,C#和Java语言是纯粹的面向对象的编程语言并吸收了C、C++ 语言的很多优点,摒弃了很多缺点,但C#编程语言的运行依赖于Windows平台,而Java语言不依赖于任何平台,因此使得熟悉C、C++、C#的程序员能够很方便地转向Java编程。具体描述有如下几点。
Java与C、C++对比
1) 全局变量
在Java编程的过程中,不能在类之外定义全局变量,如:
public String name; //错,不能在类之外定义全局变量
public class GlobalVar{
public static global_var; //全局变量也叫成员变量或成员属性
}
要定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。在类GlobalVar中定义变量global_var为public static,使得其他类可以访问和修改该变量。Java对全局变量进行了更好的封装。而在C和C++ 中,依赖于不加封装的全局变量常常造成系统的崩溃。
2) 剔除goto关键字
虽然在Java中将关键字goto保留了,但是Java不支持C、C++ 中的goto语句,而是通过异常处理语句try、Catch、final等来代替C、C++ 中用goto语句来处理遇到错误时跳转的情况,使程序更易读且更结构化。
3) 良好的指针控制
指针是C、C++ 编程语言中最有魅力的特性,但它的超高使用难度加上超高灵活性,使得大部分程序员望而止步,在学习C、C++ 语言进行编程的过程中,通过指针所进行的内存地址操作常常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C或C++ 中的私有成员,从而破坏安全性,造成系统的崩溃。而Java语言对指针进行完全的控制,程序员不能直接进行任何指针操作,例如把整数转化为指针,或者通过指针释放某一内存地址等。同时,数组作为类在Java中实现,较好地解决了数组访问越界这一问题。
4) 自动内存回收
一般内存资源有限,很容易被程序破坏。在C中,程序员通过库函数malloc()和free()来分配和释放内存,在C++ 中则通过运算符new和delete来分配和释放内存。再次释放已释放的内存块或未被分配的内存块,会造成系统的崩溃;同样,忘记释放不再使用的内存块也会逐渐耗尽系统资源。而在Java中,所有的数据结构都是对象,通过运算符new为它们分配内存堆。通过运算符new可以得到对象的处理权,而实际分配给对象的内存可能随程序运行而改变,Java对此自动地进行管理并且进行垃圾收集,有效防止了由于程序员的误操作而导致的错误,并且更好地利用了系统资源。
5) 固定的数据类型
在C、C++ 语言中不同数据类型在不同的平台上所占的位数不一样,例如,int类型的数据在IBM PC中占16位,在VAX-II中占32位,这就导致了代码的不可移植性。但在Java中,对于这些数据类型都采用国际统一字符编码,即分配固定长度的位数,例如,对int类型的数据,它在任何机器上都占32位,这就保证了Java的平台无关性。
6) 严格控制数据类型转换
一种数据类型的数据转换成另外一种数据类型的数据时,常常会出现数据精度丢失的问题,在C、C++ 中,通过指针进行任意的数据类型转换极不安全,而在Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换。
7) 库文件
编程语言中丰富的库文件能快速地开发出各种应用软件。C、C++ 中用头文件来声明类的原型以及全局变量、库函数等,在大的系统中,维护这些头文件是很困难的。而Java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员的操作。同时,Java中用import语句来与其他类进行通信,以便使用它们的方法。
8) 类与结构体和联合体
安全是一个永恒的话题。C、C++ 中的结构体和联合体中的所有成员均为公有,这就带来了安全性问题。Java中不包含结构体和联合体,所有的内容都封装在类中。其实Java与C、C++ 编程语言还有很多的差别如:速度、内部类、方法嵌入等,但总的来说Java提取了很多其他编程语言的优点,使它更适合于大众程序员的需求。
2. Java与C# 对比
Java语言是开放式的世界语言,基本源代码都公开,而C# 作为Microsoft的一门主打语言也不甘示弱。一个开源,一个收费,它们两者基本上都对C、C++ 深涩的语法和语义进行了改进。在语法方面,两者都摒弃了const修饰、宏替换等;在继承方面,两者都采用更易于理解的单继承和多接口实现方案;在源代码组织方面,两者都提出了声明与实现于一体的逻辑封装。
Java与C# 的不同点主要体现在:C# 在Microsoft的支撑下提供了强大的Visual Studio开发平台,可以极好地提高C# 程序的开发效率。而且C#更善于利用Windows平台。Java的设计宗旨是独立于任何平台,因此自然不会提供太多的Windows特性。但这也正体现了Java语言的跨平台优势。一般企业级应用,无法确定这个应用是在怎样的平台上运行。因而企业级开发一般选择Java作为开发语言。