JAVA的世界
 

    在Internet时代,崛起了两种编程语言:Java和C#,后者,不但出现的历史比较短,而且和Java与Objiect Pascal都非常相似,所以,篇 
  我们重点介绍Java,相信你通过摸索,也能阅读和尝试编写C#程序。
本章的目的,使你在原有的程序设计经验基础上,快速掌握Java语言的特点,达到可以读懂Java程序,并可以编写简单Java程序。

32.1 好一杯热咖啡——Java简介
Java是一种简单的面象对象的分布式的解释的健壮的安全的结构中立的可移植的性能很优异的多线程的动态的语言。

图32-1 Java的金字招牌出现在各种Java书上

Java的特点
 简单:Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。Java语言的简单性主要体现在以下三个方面:
 Java的风格类似于C++,因而C++程序员是非常熟悉的。从某种意义上讲,Java语言是C及C++语言的一个变种,因此,C++程序员可以很
快就掌握Java编程技术。
 Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。
 Java提供了丰富的类库。
 面向对象:面向对象可以说是Java最重要的特性。Java语言的设计完全是面向对象的,它不支持类似C语言那样的面向过程的程序设计
技术。Java支持静态和动态风格的代码继承及重用。
 分布式:Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此,Java应用程序可凭借URL打开并访问网络上的对象,其访问方式
与访问本地文件系统几乎完全相同。为分布环境尤其是Internet提供动态内容无疑是一项非常宏伟的任务,但Java的语法特性却使很容易地实
现这项目标。
 健壮:Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自已操纵内存减少了内存出错
的可能性。Java还实现了真数组,避免了覆盖数据的可能。这供功能特征大大缩短了开发Java应用程序的周期。Java提供:Null指针检测数组
边界检测异常出口字节代码校验
 结构中立:为了建立Java作为网络的一个整体,Java将它的程序编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能
执行这种中间代码。现在,Java运行系统有Solaris2。4(SPARC),Win32系统(Windows95和WindowsNT)等。


Java源程序被编译成一种高层次的与机器无关的byte-code格式语言,这种语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行

 安全:Java的安全性可从两个方面得到保证。一方面,在Java语言里,象指针和释放内存等C++功能被删除,避免了非法内存操作。另
一方面,当Java用来创建浏览器时,语言功能和浏览器本身提供的功能结合起来,使它更安全。Java语言在你的机器上执行前,要经过很多次
的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。
 Byte-code校验:如果byte-code通过代码校验,没有返回错误,可知道:代码没有堆栈上溢出和下溢出所有操作代码参数类型都是正确
的没有发生非法数据转换,如将整数转换成指针。访问对象操作是合法的
 类装载
ClassLoader通过将本机类与网络资源类的名称分开,来保持安全性。因为调入类时总要经过检查,这样避免了特洛伊木马现象的出现。从
网络上下载的类被调进一个与源相关的私有的名字域。当一个私有类访问另一个类时,build-in(本机类)首先被检查,然后检查相关的类。这
样就避免了破坏本机类情况的出现。
 可移植的
运行平台无关的特性使得Java应用程序可以在配备了Java解释器和运行环境的任何计算机系统上运行,这成为Java应用软件便于移植的良
好基础。但仅仅如此还不够。如果基本数据类型设计依赖于具体实现,也将为程序的移植带来很大不便。例如在Windows5。1中整数(Integer)
为16bits,在Windows95中整数为52bits,在DECAlpha中整数为64bits,在Intel486中为52bits。通过定义独立于平台的基本数据类型及其运算
,Java数据得以在任何硬件平台上保持一致。Java语言的基本数据类型及其表示方式如下:byte8-bit二进制补码short16-bit二进制补码
int52-bit二进制补码long64-bit二进制补码float52-bitIEEE754浮点数double52-bitIEEE754浮点数char16-bitUnicode字符。
在任何Java解释器中,数据类型都是依据以上标准具体实现的。因为几乎目前使用的所有CPU都能支持以上数据类型、8~64位整数格式的
补码运算和单/双精度浮点运算。Java编译器本身就是用Java语言编写的。Java运算系统的编制依据POSIX方便移植的限制,用ANSIC语言写成。
Java语言规范中也没有任何”同具体实现相关”的内容。
 解释的
Java解释器(运行系统)能直接运行目标代码指令。链接程序通常比编译程序所需资源少,所以程序员可以在创建源程序上花上更多的时间

 高性能
如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令。翻译目标代码的速度与C/C++的性能没什么区别。
 多线程
Java提供的多线程功能使得在一个程序里可同时执行多个小任务。线程--有时也称小进程--是一个大进程里分出来的小的独立的进程
。因为Java实现的多线程技术,所以比C和C++更键壮。多线程带来的更大的好处是更好的交互性能和实时控制性能。当然实时控制性能还取决
于系统本身(UNIX,Windows,Macintosh等),在开发难易程度和性能上都比单线程要好。任何用过当前浏览器的人,都感觉为调一副图片而等
待是一件很烦恼的事情。在Java里,你可用一个单线程来调一副图片,而你可以访问HTML里的其它信息而不必等它。
 动态
Java的动态特性是其面向对象设计方法的供展。它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法
实现的。
在C++程序设计过程中,每当在类中增加一个实例变量或一种成员函数后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。
Java从如下几方面采取措供来解决这个问题。Java编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码
中保存下传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。这样,一个在存储器生成的对象不在编译过程
中决定,而是延迟到运行时由解释器确定的。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。解释执行字节码时,这种符号
信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。
在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的
所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。Java还简化了使用一个升级的或全新的协议的方法。如果你的系统
运行Java程序时遇到了不知怎样处理的程序,没关系,Java能自动下载你所需要的功能程序。
与C和C++语言的异同
Java提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。C++安全性不好,但C和C++还是被大家所接受,所以Java设计成C++
形式,让大家很容易学习。Java去掉了C++语言的许多功能,让Java的语言功能很精炼,并增加了一供很有用的功能,Java去掉了以下几个C和
C++功能和特征:指针运算结构typedefs#define需要释放内存全局变量的定义这些功能都是很容易引起错误的地方。

3 Java学习参考
