目录
语言特征
主要特征
语言之间的差异
优劣势
一、语言特征java编程语言的风格十分接近C语言、C++语言。java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象的核心。java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不在为被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在java1.5版本中,java又引用了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成为二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现”一次编译,到处执行“的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了java程序的性能。
编辑java源代码可以使用任何无格式的纯文本编辑器,在Windows操作系统上可以使用微软记事本(Notepad)、EditPlus等程序,在Linux平台上可以使用vi工具等。
二、主要特性java语言是易学的。Java语言的语法与C语言C++语言很接近,使得大部分程序员很容易学习和使用java。另一方面,java中丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,java语言不使用指针,而是引用。并提供了自动的废料收集,使得程序员不在为内存管理而担忧。
java语言是强制面向对象的。java语言提供了类、接口和和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。java语言全面支持动态绑定。总之,java语言是一个纯的面向对象程序设计语言。
java语言是分布式的。java语言支持internet应用的开发,在基本的java应用编程接口中有一个网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。java的RMI(远程激活方法)机制也是开发分布式应用的重要手段。
java语言是健壮的。java的强类型机制、异常处理、垃圾的自动收集等是java程序健壮性的重要保证。对指针的丢弃是java的明智选择。java的安全检查机制使得java更具健壮性。
java语言是安全的。Java语言通常被使用在网络环境中,为此,java提供了一个安全机制以防恶意代码的攻击。除了java语言具备的许多安全特性以外,java对通过网络下载的类具有一个安全防范意识(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让java应用设置安全哨兵。
java语言是体系结构中立的。java程序(后缀为java的文件)在java平台上被编译为体系体系结构中立的字节码格式(后缀名为class的文件),然后可以在实现这个java平台的任何系统中运行。这种途径适合于异构的网络环境和软件分发。
java语言是可移植的。这种可移植性来源于体系结构中立性,另外,java还严格规定了各个基本类型的长度。java系统本身也具有很强的可移植性,java编译器是用java实现的,java的运行环境是用ANSIC实现的。
java语言是解释型的。如前所述,java程序在java平台上被编译为字节码格式,然后可以在实现这个java平台的任何系统中运行。在运行时,java平台中的java解释器对这些字节码进行解释执行,执行过程中需要的类在连接阶段被载入到运行环境中。
java是性能略高的。与那些解释性的高级脚本语言相比,java的性能是较优的。
java语言是原生支持多线程的。在java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出的子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而软方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
java语言是动态的。java语言的设计目标之一是适应于动态变化的环境。java程序需要的类能够动态的被载入运行环境,也可以通过网络载入所需要的类。这也有利于软件的升级。另外,java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
java语言的优良特性使得java应用具备无比的健壮性和可靠性,这也减少了应用系统的维护费用。java对对象技术的全面支持和java平台中内嵌的API能缩短应用系统的开发时间并降低成本,java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和再多平台之间传递信息的低成本方式。特别是java企业应用编程接口(java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
三、语言之间的差异熟悉C语言和C++语言的读者一定想要搞清楚这个问题,实际上,java确实是从C语言和C++语言中继承了许多成分,甚至可以将java看成是类C语言发展和衍生的产物。比如java语言的变量声明,操作符形式,参数传递、流程控制等和C语言、C++语言完全相同。尽管如此,java和C语言,C++语言又有许多差别,主要表现如下几个方面:
java中对内存分配是动态的,它采用了面向对象的机制,采用了运算符new为每个对象分配内存空间,而且,实际内存还会随程序的运行情况而改变。程序运行中java系统自动对内存进行扫描,对长期不用的空间作为“垃圾”进行回收,使得系统资源得到更充分的利用。按照这种机制,程序员不必关注内存管理问题,这使java程序的编写变得简单明了,并且避免了由于内存管理方面的差错而导致系统出现问题。而C语言通过malloc()和free()这两个库函数来分别实现分配内存和释放内存空间的,C++语言中则通过运算符new和delete来分配和释放内存。在C和C++这种机制中,程序员必须非常仔细的处理内存的使用问题,一方面,如果对己释放的内存在做释放或者对未分配的内存作释放,都会造成死机;而另一方面,如果对长期不用的或不在使用的内存不释放,则会浪费系统资源,甚至因此造成资源枯竭。
java不在所有类之外定义全局变量,而是在某一个类中定义一种公用静态的变量来完成全局变量的功能。
java不用goto语句,而使用try-catch-finally异常处理语句来代替goto语句处理出错的功能。
java不支持头文件,而C语言和C++语言中都使用头文件声明类的原型、全局变量、库函数等,这种采用头文件的结构使得运行维护相当复杂。
java不支持宏定义。java只能使用final来定义常量。
java对每种数据类型都分配固定长度。比如,在java中,int类型总是32位的,而在C语言和C++语言中,对于不同的平台,同一个数据类型分配不同的字节数,同样是int类型,在PC机中为二字节即16位,而在VAX-11中,则为32位。这使得C语言造成不可移植性,而java则具备跨平台性(平台无关性)。
类型转换不同。在C语言和C++语言中,可通过指针进行任意得类型转换,常常带来不安全性,而在java中,运行时系统对对象得处理要进行类型相容性检查,以防不安全的转移。
结构和联合得处理。java中根本就不允许类似C语言得结构体(struct)和联合体(union)包含结构和联动,所有得内容都封装在类 里面。
java不在使用指针。指针是C语言和C++语言中最灵活,也最容易产生错误得数据类型。由指针所进行得内存地址操作长会造成不可预知得错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C++中得私有成员,从而破坏安全性。而java用”引用“的方式,对指针进行完全的控制,程序员不能直接进行任何指针操作。
避免平台依赖。java语言编写的类库可以在其他平台的java应用程序中使用,而不像C++语言必须运行于单一平台。
在B/S架构开发方面,java要远远优于C++。
四、优略势优势:java适合团队开发,软件工程可以相对做到规范。由于java语言本身的极其严格语法的特点,java语言无法写出结构混乱的程序。这将强迫程序员的代码结构的规范性。这是一个很难比拟的优势。略势:j2ee的架构很完美,第一版软件可以做到满意,但是很不适合互联网模式的持续不断修改。互联网软件工程管理上的不足,持续的修修补补导致架构的破坏。