Java的语言特点
1.面向对象
尽管Java是基于C++的,但是相比之下,Java是一种更“纯粹”的面向对象程序设计语言。
面向对象其实是现实世界模型的自然延伸,世间万物都可以看作为对象。对象之间通过消息相互作用,现实世界中任何实体都以归纳成为某类事物,也因此任何对象都是某一类事物的实例,如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。
面向对象语言都支持三个概念:封装,多态和继承,Java也不例外。现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象的各个字段数据,行为表示对象的方法(方法的作用是处理数据或同外界交互)。所谓封装,就是用一个自主式框架把对象的数据和方法联在一起形成一个整体。可以说,对象是支持封装的手段,是封装的基本单位。Java语言的封装性较强,因为Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作。
Alan Kay曾总结了第一个成功的面向对象语言,同时也是Java所基于的语言之一Smalltalk的五个基本特征:
1 万物皆对象。将对象视为奇特的变量,它可以存储数据,除此之外,你还可以要求它在自身上执行操作。理论上讲,你可以抽取待求问题的任何概念概念化构件(狗,建筑物,服务等),将其表示为程序中的对象。
2 程序时对象的集合,他们通过发送消息来告知彼此所要做的。要想请求一个对象,就必须对该对象发送一条消息。更具体地说,可以把消息想象为对某个特定对象的方法的调用请求。
3 每个对象都有自己的由其它对象所构成的存储。换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象。因此,可以在程序中构件复杂的体系,同时将其复杂性隐藏在对象的简单性背后。
4 每个对象都拥有其类型。按照通用的说法,“每个对象都是某个类(class)的一个实例(instance)”,这里“类”就是“类型”的同意词。每个类最重要的区别于其他类的特性就是“可以发送什么样的消息给他”。
5 某个特定类型的所有对象都可以接收同样的消息。这是一句意味深长的表述,比如因为“圆形”类型的对象同时也是“几何形”类型的对象,所以一个“圆形”对象必定能够接受发送给“几何形”对象的消息。这意味着可以编写“几何形”交互并自动处理所有与几何形性质相关的事物的代码
2.平台无关性
Java是平无关的语言是指用Java写的程序不用修改就可以在不同软硬件平台上运行。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(Java Virtual Machine JVM)。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈,寄存器组等。但JVM通常是在软件商而不是在硬件上实现。JVM是Java平台无关的基础,在JVM上,有一个Java解释器来解释Java编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码。任何一台机器只要配备了Java编译器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。另外,Java采用的是基于IEEE标准的数据类类型,通过JVM保证数据类型的一致性,也确保了Java的平台无关性。
当运行Java程序时,他首先被编译成字节代码。字节代码非常类似于机器指令,所以Java程序非常高效。然而,字节代码并不转对一种特定的机器,所以Java程序无需重新编译便可在众多不同的计算机上执行。
Java源程序被编译成类文件,他相当于程序的字节代码表现。在一个Java类文件中,所有对方法及实力变量的参照均按名进行,并在第一次执行代码时加以分辨。这使得代码更通用,更不易受修改的影响,而仍具高效
3.安全性和可靠性
Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性。Java的编程类似C++,学习过C++的程序员将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。
Java是强类型的语言,要求显示的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠。
Java的垃圾回收机制防止了内存丢失等动态内存分配导致的问题。
Java编译器运行时实施检查,可以发现数组和字符串访问越界。
Java提供了异常树立机制,程序员可以把一组错误的代码放在一个地方,这样可以简化错误处理任务便于恢复。
由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒升序和产生和下载程序对本地系统的威胁破坏。当Java自己进入解释器时,首先必须经过字节码校检器的检查,然后,Java编译器将决定程序中类的内存分布,随后,类装载器负责把来自网络的类装载到单独的内存区域,避免程序之间的相互干扰破坏。最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统。
4.多线程并发机制
线程是操作系统的一种新概念,它又被称作轻量进程,是比传统进程更小的可并发执行的单位。
C和C++采用单线程体系结构,而Java却提供了多线程支持。Java在两方面支持多线程。一方面,Java环境本身就是多线程的。若干个系统线程运行负责必要的无用单元回收,系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序开发。Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态。Java的线程还包括一组同步原语。这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便得写出支持多线程的应用程序,提高程序执行效率。必须注意地是,Java的多线程支持在一定程度上受运行时支持平台的限制。例如,如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。
5.分布式
分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上,操作分布是指把一个计算分散在不同主机上处理。
Java支持WWW客户机/服务器计算模式,因此,它支持这两种分布性。对于前者,Java提供了一个叫作URL的对象,利用这个对象,你可以打开并访问具有相同URL地址上的对象,访问方式与访问本地文件系统相同。对于后者,Java的applet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。
Java提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方便得实现Java的分布式特性。
6.Java小程序
用Java可以写两种类型的程序:小程序(又叫JavaApplet)和应用程序(JavaApplication)。小程序是嵌入在HTML文档中的Java程序;而Java应用程序是从命令行运行的程序。对Java而言,Java小程序的大小和复杂性都没有限制。事实上,Java小程序有些方面比Java应用程序更强大。但是由于目前Internet通讯速度有限,因此大多数小程序规模较小。小程序和应用程序之间的技术差别在于运行环境。
Java应用程序运行在最简单的环境中,它的唯一外部输入就是命令行参数。另一方面,Java小程序则需要来自Web浏览器的大量信息:它需要知道何时启动,何时放入浏览器窗口,何处,何时激活关闭。由于这两种不同的执行环境,小程序和应用程序的最低要求不同。
由于WWW使小程序的发布十分便利,因此小程序更适合作为Internet上的应用程序。相反,非网络系统和内存较小的系统更适合用Java应用程序而较少用Java小程序实现。另外,Java应用程序也很容易以Internet为基础环境,事实上有些优秀的Java应用程序正是如此。