Java 程序设计教程(第 5 版 )
Java How To Program ( 5th )

作者: H. M. Deitel , P. J. Deitel
译者:施平安,施惠琼,柳赐佳
原出版社: Prentice Hall
出版社:清华大学出版社
定价:98元  

章节下载:
第16章
内容简介:
   Java经过多年发展,现在已经真正成长为严格的、主流的开发语言。本书的作者是国际知名的教育专家H.M.Deitel和P.J.Deitel。全书通过Deitel特有的“活代码”方式,详细讲解了如何使用Java开发数据库应用程序、多媒体应用程序、网络应用程序。本书还介绍了软件工程知识、界面设计知识、调试技巧、性能提示等方面的内容。另外,本书还配有实验手册,它提供了一个优秀的学习环境,学生们可以用所学概念解决精心设计的各种问题。教师也能更好地评估学生对教材的理解程度。该实验手册也可以作为开放式实验、家庭作业以及自学用。
   本书的读者对象是各类编程人员,计算机相关专业的本科生和研究生。

前言:
   欢迎进入Java世界!在Deitel & Associates公司,我们编写大学级编程语言教材和专业参考书,并努力使这些书反映最新的编程技术。撰写本书是一件令人愉快的事情。该书及辅助材料囊括了教师和学生在教学中所需的一切,它不愧为一套内涵丰富、寓教于乐的参考书。本书基于Java最新版本——Java 2平台,标准版(J2SE),1.4.1版,同时使用对象管理组(Object Management Group,OMG)的最新版UML(Unified Modeling Language,统一建模语言)进行面向对象设计。我们调整了本书的写作风格、教学方法、编码风格以及辅助软件包,增加了大量对网络数据库应用程序的讨论。前言中的“本书概述”有助于教师、学生和专业人员更深刻地体会到本书内容的实用性:使用Java进行面向对象编程;UML面向对象设计和网络应用程序。若要正确地评价本书,建议阅读“本书概述”。 |
   无论对于教师、学生和有经验的专业人员,还是刚刚入门的程序员,本书都可为你提供极大的帮助。Java是世界级的编程语言,主要用于开发企业级的应用程序,从手机、PDA到大型企业服务器应用程序。Java语言规范精确地定义了Java,该规范的HTML格式和PDF格式的电子版可从java.sun.com/docs/books/jls/index.html免费得到。我们根据Java语言规范,对本书的手稿进行了认真审核。因此,读者在学习的过程中创建的程序,都应能够在所有与J2SE 1.4.1兼容的Java平台上运行。
   在准备本版教材的过程中,曾邀请了35位著名的大学教授和行业专家对本书第4版进行评审。本书第5版采纳了他们的建议,又邀请44位著名的大学教授和行业专家对第5版手稿进行评审。如果在阅读本书过程中发现问题,请发e-mail到deitel@deitel.com;我们会立即回答。请定期访问网站www.deitel.com,请订阅www.deitel.com/newsletter/subscribe.html的DEITELTM BUZZ ONLINE电子邮件简讯。我们用这种形式使读者了解本书以及其他出版物和服务。

译者序:
   Java经过多年的发展,现已真正成长为严格、主流的开发语言。Java给我们带来的一些新概念,诸如垃圾收集、虚拟机等,已经为C#等新语言所吸纳。虽然Java不如C++灵活和全面,但更为简洁。由于跨平台与网络功能将是未来软件的发展趋势,而Java在此方面具有得天独厚的优势,因此,在我们选择语言时,不得不考虑到Java。
   本书是Deitel父子编写的全球最畅销的Java程序设计教材。全书不仅介绍了面向对象编程的基本原理和方法,又介绍了结构化编程的基本原理和方法,因为对象的内部结构通常是用结构化编程方法构造的,而且有时处理对象的逻辑也采用结构化编程方法来表达。本书注重理论与实践的结合,每章都以若干完整的示例程序讲述编程时应考虑的一些注意事项。此外,本版还增加了大量选学内容;还对《Java程序设计教程》第4版的第9章进行了精心调整,把它分为两章,这种改进使面向对象的材料更有针对性,让学生和专业人员,尤其是那些初次接触面向对象编程的人,更容易理解这些材料;同时还详细介绍了Java的新I/O API;增加了用JDBC、Servlet和JSP开发数据库和Web应用程序的内容。本书是高等院校进行程序设计和Java教学的教材,是软件设计人员进行Java程序开发的优秀参考书。
   Deitel & Associates公司是一家全球知名的培训和出版公司,公司提供了面向对象技术和主要编程语言的课程,这些语言包括Java、Advanced Java、C、C++、Visual C++.NET、Visual Basic.NET、C#、XML、Perl、Python等等。本书的作者均是该公司的核心人员,H.M.Deitel博士是公司的首席执行官,在计算机领域已有40年的工作经验,无论专业技术还是学校教育,均有非常高的造诣;P.J.Deitel是公司的执行总裁,负责向业内许多知名客户讲授C、C++、Java等。
   全书的翻译出版是集体工作的结晶。施平安、施惠琼、文家焱、蔡桂凌、施琳琼、陈华、柳赐佳、罗德良、胡丽君、周莎莎、肖巨平、卢毅、黄山松、李旭兴、张武军、黄淑惠、柳晁锦、柳晁惠、施卓成、张琼雯、张庭辉、施晓东、方杰、卢彬、程强和施红军等负责全书的翻译工作,柳玉芬、柳小艳、孔颂燕、梁锦伦、程高、蔡荣荣、陈建伟、戴寿杰、余坦克、汪阅东和陈稽康等负责全书的审校工作,施金庭、柳聿荫、施群肖和缪彩珠等负责全书的录入和排版工作。全书最后由施平安、文家焱、段超和余军豪负责统稿。
   在翻译过程中,我们对本书中出现的所有术语和难词难句都进行了仔细的推敲和研究,但是,疏漏和争议之处还是在所难免,望广大读者提出宝贵的意见。
                                                译者
                                               2003年9月

本书的新特色:
   本版教材有许多新特色和新内容,包括:

代码清洗
   “代码清洗”是用注释、有意义的标识符、缩进以及纵向间距,将有意义的程序单元进行突出显示的一种手段。经过如此处理,程序将更容易阅读,也更容易自我编档。

第9章和第10章调整了对面向对象编程的讨论
   这是本版教材的最明显的改进之一。我们对《Java程序设计教程》(第4版)的第9章进行了精心改动,分成两章。使之更加清楚,以便学生和专业人员,尤其是那些首次接触面向对象编程的人,更容易使用这些材料。
   第9章是“面向对象编程:继承”。新的第9章通过5个精选例子,循序渐进地向读者说明了private数据、protected数据以及通过继承的软件重用。首先,说明了一个用private实例变量和public方法操纵数据的类。然后,通过增加几个功能实现了第1个类。为了实现该类,我们复制了第1个例子的大部分代码。第3个例子开始讨论继承和软件重用——我们用第1个例子中的类作超类,在新的子类中继承超类的数据和功能。该例子介绍了继承机制,说明了子类不能直接访问其超类的private成员。这就构成了第4个例子,该例子介绍了超类中的protected数据,说明了子类能访问从超类继承的protected数据。最后一个例子说明了正确的软件工程原则,把超类的数据定义为private,子类使用超类的public方法(它们被子类继承)操纵超类的private数据。这5个例子按三级类层次结构的顺序进行介绍,其中利用了前面介绍的软件工程技术。该章最后讨论了有关继承的软件工程问题。
   第10章是“面向对象编程:多态性”。新的第10章建立在第9章的继承概念之上,重点考虑类在继承层次结构中的关系。第10章用3个例子介绍了这些关系提供的强大处理能力。第1个例子说明了子类对象同其超类间的“is-a”关系,这使子类对象能被看成超类的一个对象。我们谈到了可以把一个子类对象的引用赋予一个超类变量,并调用超类关于那个对象的方法。该例子运用了多态机制,使一个程序处理与一个类层次结构关联的类对象时,能够把它们作为超类类型的对象。通过一个超类变量调用一个方法,则调用特定子类中的相应方法。第2个例子说明了相反的情况不成立时——即,不能将一个超类对象看成其子类对象时,如果一个程序试图以这种方式操纵一个超类对象,则编译器会提示出错。第3个例子说明了惟一能够通过超类变量调用的方法是那些被超类类型定义的方法。该例子表明,如果超类变量试图调用只有子类才有的方法,则编译器会提示出错。接着是一个关于多态性的案例分析,在案例分析中,我们处理包含对象引用的变量数组。数组元素引用的所有对象有公共的抽象超类,该抽象超类包含了层次结构中每个类共有的方法集。最后一个案例分析说明:通过确定当前正被处理的对象类型,按多态性处理对象的程序仍然能够执行特定类型的处理。

Java的新I/O API
  
Java的新I/O(New I/O,NIO)API是J2SE 1.4中新增的重要特征。我们选用其中3章的部分内容,概述了一些API。11.8节说明了NIO的正则表达式,它使程序通过字符模式搜索字符串。17.13节介绍了NIO的高性能I/O类,使开发者能够使用缓冲区、通道、字符集等。该节还介绍了一个用通道和缓冲区把数据写入文件以及从文件读取数据的例子。18.11节继续NIO API的讨论,介绍了用于实现高性能网络服务器的选择器(selector)和无阻塞I/O(non-blocking I/O),然后实现了一个分布式聊天程序以说明这些功能。11.8节和17.13节还提供了进一步研究NIO API的链接。

用JDBC、Servlet和JSP开发数据库和Web应用程序
应广大读者的要求,我们在本书中恢复了对几个主题的讨论。第23章为JDBC Java数据库连接,说明如何用JDBC API构建数据驱动的应用程序。第24章为Servelet,第25章为JavaServer Pages(JSP),这两章完善了对Internet和Web编程主题的讨论,提供了读者开发Internet上的、基于Web的应用所需的一切!读者将了解如何构建所谓的“n层应用程序”,其中每层提供的功能既可以通过Internet分布于不同的计算机上,也可以在相同的计算机上执行。我们特地构建了一个三层的、基于Web的调查程序和一个三层的、基于Web的guestbook程序。每个应用程序的信息存储在应用程序的数据层——存储在用IBM的基于Java的Cloudscape数据库产品实现的数据库中。用户在每个应用程序的客户层输入输入并得到响应,客户层通常指运行Web浏览器(诸如Microsoft Internet Explorer或者Netscape等)的计算机。当然,Web浏览器知道如何通过Internet与Web站点通信。中间层包含一个Web服务器以及一个或者多个特定应用程序的servlet(在调查程序中)或者JavaServer Page(在guestbook程序中)。对于这些例子,我们用Apache的Tomcat Web服务器作为应用程序服务器。Tomcat是servlet和JavaServer Page技术的标准实现,可从www.apache.org免费下载。Tomcat用超文本传输协议(HyperText Transfer Protocol,HTTP)通过Internet与客户层通信。我们讨论了Web服务器在Web编程中的关键作用,并提供了许多例子以说明Web浏览器和Web服务器之间的交互。

统一建模语言
   统一建模语言(Unified Modeling Language,UML)已经成为面向对象系统设计首选的图形化建模语言。在《Java程序设计教程》(第4版)中,我们只是在案例分析部分采用了UML,并用常规的流程图和继承图说明。然而在本书中,我们已经将所有图转变成符合UML 1.4标准的图。我们特别更新了UML/OOD电梯模拟案例分析中的图;我们把第4章和第5章中控制语句的流程图转成UML活动图;并把第9、10、12、13和15章中的所有继承图转成UML类图。
   第5版精心调整了(虽选学,但强烈推荐)案例分析,这些是用UML进行面向对象设计的讨论。我们把这些案例分析提交给著名的OOD/UML评审团队,其成员包括Rational公司(UML的创建者)在该领域的领导和对象管理组(负责UML的维护和演进)。在案例分析中,我们完整实现了一个电梯模拟系统。在第1~8、10~14、16和19章末尾的“对象思考”中,我们分层次地、仔细地介绍了UML面向对象设计。我们提供了一个简明扼要的UML子集,然后指引读者亲身体会设计过程,这是为刚入门的面向对象设计者或者程序员准备的。案例分析提供了完整的解答。它不是练习,而是一个端到端的学习过程,并以详细的Java代码走查结束。在前面5章中,我们主要讨论“传统的”结构化编程方法,因为我们构建的对象将使用这些结构化程序部件。每章以“对象思考”结束,在这一节中,我们介绍了UML面向对象设计。“对象思考”有助于学生进行面向对象设计,以便在第8章一开始时就能运用面向对象编程概念。在第1章末尾的“对象思考”中,我们介绍了OOD的基本概念和术语。在第2~5章末尾的可选案例分析的“对象思考”部分,我们考虑了更本质的问题,因为我们要用OOD技术处理一个颇具挑战性的难题。我们分析了典型的问题陈述,它要求构建一个系统,确定实现该系统所需的对象,确定这些对象必须有的属性、确定这些对象需要展示的行为以及规定对象必须怎样交互以满足系统需求。我们在讨论如何编写Java程序前完成了这步工作。在附录D~F,我们提供了前几章设计的面向对象系统的Java实现。该案例分析将为学生以后在行业中遇到的各种项目打下坚实的基础。我们用精心研制的、增量式的面向对象设计过程产生一个电梯模拟系统的UML模型。根据设计成果,我们用特有的表示方法产生了大量的Java实现,其中包括类、对象、封装、可见性、组合和继承。

设计模式探索

   该小结是选学内容,介绍了流行的面向对象设计模式。在过去10年,软件工程行业在设计模式领域已经取得了重大进展——有许多公开的软件构架用于构造灵活的、可维护的软件(参见Gamma,Erich,Richard Helm,Ralph Johnson和John Vlissides合著的《设计模式:面向对象软件的重用元素》Massachusetts:Addison-Wesley,1995)。采用设计模式后,可大大降低设计过程的复杂度。我们介绍了几个Java设计模式,但是这些设计模式也可以用其他面向对象语言实现,诸如C++、C#或者Visual Basic等。我们讲述了Sun Microsystems公司的Java API中用到的几个设计模式。本书中许多程序中使用了设计模式,我们会在“设计模式探索”中说明。这些程序是使用设计模式构造可靠的、健壮的面向对象软件的范例。

教学方法
   本书包含了大量实例、练习和项目,它们选自许多领域,目的是为学生提供解决现实问题的机会。本书重视良好的软件工程原则,强调程序的清晰性。我们赞同通过例子进行教学,尽量避开晦涩难解的术语和语法规则。我们的代码在各种流行的Java平台上测试通过。本书作者的大部分时间都在讲授主流编程语言,本书非常重视良好的教学方法。

用活代码方式学习Java
   本书附有活代码(Live-Code)。对于每个新概念,都用一个完整的、能实际运行的例子介绍,后面再附一个或多个执行情况,这样做的目的是表明输入/输出的对话过程。这种风格体现了我们讲授和编写程序的方式。我们把这种讲授和编写程序的方法称为活代码方法。我们主张用编程语言讲授编程语言。在阅读本书的例子时,就像真正在计算机上输入和运行程序一样。在www.deitel.com上,提供了本书例子的所有源代码。我们鼓励读者运行每个例子。

从第2章的应用程序和Swing开始Java编程之旅
   本书从第2章的Swing GUI组件直接进入Java应用程序编程。因为有太多的知识需要了解,所以我们直接进入Java编程阶段!学Java绝非易事,但用Java编程是很有趣的,并且可以立即看到结果。通过可重用组件的扩展类库,学生很快就可以让图形程序、动画程序、多媒体程序、音频程序、多线程程序、数据库程序、网络程序运行起来。学生可以实现大型项目。在1到2个学期的课程中,这通常比C和C++的入门课程更见成效。

网上资源
  本书的所有源代码都可从此处下载:www.deitel.com或www.prenhall.com/deitel。注册很简便,下载又是免费的。建议大家下载,然后在阅读相应内容后运行每个程序。修改程序,然后立即看效果,这是一种增强学习效果的有效途径。

学习目标
   每章都以“学习目标”开头,目的是使学生了解每章的主题。在学完每章后,使他们可以判断是否达到预期目标。这有助于学生树立学习的信心。

219个示例程序(及输出)23 341行代码
   我们用完整的、可实际运行的程序来讲解Java的特性。这些活代码程序既有寥寥几行的,也有几百行的。每个后面都附有一个窗口,包含程序运行结果,这有助于学生判断程序是否如期望的那样运行。将输出结果与产生结果的程序关联,对于概念的学习和巩固,将起到意想不到的作用。

615幅图表
   本书包含大量图形、线条图、程序及输出。我们已将所有流程图转成UML活动图,同时还用UML类图对类间关系进行建模。

534条编程提示
   书中包含大量编程提示,目的是帮助学生将学习重点放在程序开发的重要问题上。提示形式多样,有几百个之多,包括:良好编程习惯、常见编程错误、错误预防提示、界面设计知识、性能提示、可移植性提示以及软件工程知识。这些提示和编程习惯是作者数十年编程和教学经验的结晶。一名数学专业的学生告诉我们,她觉得这种方法犹如数学教材上的公理、定理和推论;牢记这些,有助于打造出优秀的软件。

82条良好编程习惯
   提醒学生编写清晰的程序。这有助于写出更好阅读、更易理解以及更容易维护的程序。

156条常见编程错误
   学生们在学习一种语言时,尤其是上第一门程序设计课时,经常会犯某些错误。关注这些常见的编程错误,可以减小学生们重犯相同错误的可能性。也可以减少学生们心中的疑惑。

50条错误预防提示
   当最初设计它时,原想用来告诉学生如何测试和调试Java程序。事实上,许多提示描述了减少“bug”可能性的Java特征,从而简化了测试和调试过程。

36条界面设计知识
   我们用界面设计知识强调图形用户界面的规范。这有助于学生亲手设计符合工业标准的图形用户界面。

52条性能提示
   根据我们的经验,对于学习第一门程序设计课的学生,教他们编写清晰的、易于理解的程序也许是最重要的目标。学生们热衷于编写速度最快的、内存占用最少的、键击数最少的程序,实际上他们关心的是性能。他们想了解程序经过哪些调节之后可改善性能。因此,我们强调了改善程序性能的问题——使程序运行得更快,或是内存占用最小。

23条可移植性提示
   Java的一个重要思想就是重视可移植性,因此某些程序员认为,如果用Java实现一个应用程序,则应用程序可以轻松地在所有Java平台间移植。遗憾的是,情况并非总是如此。本书包含了可移植性提示,以帮助学生们编写可移植代码,并提供了如何实现高度可移植性的建议。《C程序设计教程》和《C++程序设计教程》中包含了更多的可移植性提示。本书关于这方面的提示较少,因为Java大多是按自顶向下的可移植方式设计的。因此,与C或者C++相比,Java程序员在可移植性的实现问题上几乎不用什么额外努力。

135条软件工程知识
   面向对象编程模式要求完全重新考虑软件的构建方式。Java是一种可以有效地实现良好的软件工程的语言。软件工程知识强调了影响软件系统构造的构架和设计问题,尤其对于大型系统。学生们在此学到的知识,对于今后走上工作岗位或深造是很有意义的,尤其是接触到大型、复杂的实际系统。

954条小结
   每章后附以“本章小结”。每章平均38条,这些有助于学生复习和巩固关键概念。

437道自测题及答案
   所有自测题和答案都是针对自学而精心设计的。这使学生能够建立起深入学习的信心,并为参加正规考试做准备。应当鼓励学生完成所有自测题,然后对照答案看看是否正确。

858道练习题
   每章最后提供了一组练习题,目的是回顾重要的术语和概念;编写独立的Java语句;编写部分Java方法和类;编写完整的Java方法、类、应用程序和applet;以及编写大型的学期项目。由于练习题取材于很多领域,所以教师能够调整课程以适应学生的特殊需要。同时,也可以设计每个学期的课堂作业。教师用这些练习题,可以布置家庭作业、小测验以及大型考试。 参考文献 书末包含了大量参考文献,包括书籍、文章和Sun Microsystems Java 2文档,欢迎进一步阅读。

内容简介:
  Java实验手册
  实验手册是对本书的补充,该实验手册设计了一些实验作业,目的是巩固学生们对讲义材料的理解。封闭式实验(closed laboratory)提供良好的学习环境,因为学生们可以用课堂上所学的概念解决精心设计的实验问题。通过监督学生的实验进展,教师也能更好地评估学生对教材的理解程度。该实验手册也可用于开放式实验(open laboratory)、家庭作业以及自学。本书和实验手册也可以捆绑购买(ISBN#0-13-102719-0)。
  Java实验手册将重点放在本书的第1~12章、第15章以及第17章。实验手册中的每章划分成实验前任务(Prelab Activities)、实验练习(Lab Exercise)以及实验后任务(Postlab Activity)。每章都提供了实验目标,介绍该实验的关键主题,而且还提供了作业检查表(assignment checklist),允许学生标记教师已布置了哪些练习。我们认为,初级课程不会超出实验手册的第11章的范围。为此,第12、15和17章的实验没有包含前几章的大量练习。不过,用更复杂的主题中的练习,教师将能够进行有效的实验。有特殊要求的教师可以写信给deitel@deitel.com。
实验前任务
  在学完本书的每章以后,要求学生完成实验前任务。实验前任务测验学生对教材内容的理解程度,并为实验课的编程练习做准备。这些练习将重点放在重要的术语和编程概念上,非常适于自测。实验前任务包括判断题、填空题、简答题、程序输出练习(在不实际运行程序的情况下,分析小型代码段的行为)以及代码改错题(指出并改正小型代码段中的错误)。
实验练习
  每章中最重要的是实验练习。这些练习教学生如何运用从本书学到的知识,并为编写Java程序做好准备。每个实验包含一个或者多个实验练习以及一个调试问题。实验练习包含如下内容:
l 实验目标强调了实验练习涉及的特定概念。
l 问题描述提供了练习的细节和提示,帮助学生实现程序。
l 示例输出说明了预期的程序行为,并进一步阐明了问题,帮助学生编写程序。
l 程序模板采用完整的Java程序,其中省略了关键代码行,加以描述性的注释。
l 问题解答提示给出了学生解答实验练习时需要考虑的关键问题。
l 后续问题和任务要求学生们修改实验练习的解答,编写与他们的解答相似的新程序,或说明在解答时进行的选择。
l 调试问题由包含语法错误或逻辑错误的代码块组成。这些问题说明编程时可能遇到的错误。
实验后任务
  教师通常会布置实验后任务,目的是为了巩固关键概念,或者为学生在实验外提供更多的编程练习。目的是测验学生对实验前和实验练习材料的理解程度,并要求学生运用学到的知识从头开始创建程序。该部分提供了两部分编程活动:编码练习和编程挑战。编码练习很短,作为完成实验前任务和实验练习后的复习之用。这些练习要求学生们用教材中的关键概念编写程序或者程序段。编程挑战让学生用学到的知识解答大量编程题目。为了帮助学生解答问题,提供了提示、示例输出或伪码。能够完成某章编程挑战的学生,说明已成功地掌握了该章内容。答案可以从www.deitel.com/books/downloads.html得到。

本书概述
  我们即将学习目前最激动人心的、发展速度最快的计算机编程语言。掌握Java将有助于开发功能强大的商业及个人计算机应用软件。
  第1章"计算机、Internet和Web概述"讨论了什么是计算机,它们是如何工作的,以及如何编制计算机程序。本章介绍了编程语言的发展简史,从最初的机器语言开始,发展到汇编语言,最后到高级语言。讨论了Java编程语言的起源。本章介绍了一个典型的Java编程环境,还介绍了对象技术、统一建模语言和设计模式。
  第2章"Java应用程序介绍"简要地介绍了Java语言的应用。本章向非程序员介绍了基本的编程概念和构造。本章中的程序说明了如何在屏幕上显示数据,以及如何通过键盘从用户处获取数据。其中一些输入和输出是通过图形用户界面(graphic user interface,GUI)实现的。本章还详细讨论了判断运算和算术运算。
  第3章"Java applet介绍"本章介绍了Java Applet。Java Applet主要指通过Internet传送并在Web浏览器(例如,Netscape Navigator和Microsoft Internet Explorer等)中执行的Java程序。本章说明了J2SDK提供的几个演示applet。然后编写了几个Java Applet,它们执行类似于第2章程序的任务,并说明了applet和应用程序之间的异同。
  第4章"控制语句(一)"重点考虑程序开发过程。本章讨论如何处理问题的陈述,并根据陈述开发可实际运行的Java程序,其中包括用伪码执行中间步骤。本章还介绍了一些基本类型以及用于判定(if和if…else)和循环(while)的简单控制语句。我们分析了计数控制的循环和标记控制的循环,并介绍了Java的增量运算符、减量运算符和赋值运算符。本章用简单的UML活动图表示每个控制语句的控制流。
第5章"控制语句(二)"继续讨论Java控制语句,举例说明了for循环语句、do…while循环语句、switch选择语句、break语句和continue语句。本章还讨论了Java的逻辑运算符。
  第6章"方法"深入探讨了对象本质。对象包含称为域的数据和称为方法的可执行单元。我们讨论了类库方法,构建了我们自己的方法。针对计算机科学课程,本章还讨论了递归。第6章介绍的技术对于构造结构合理的程序,尤其是系统程序员和应用程序员开发的大型程序是很重要的。方法重载的主题(即,允许多个方法具有相同的名字,只要它们有不同"签名")得到了启发,并且对它进行了明确说明。我们还介绍了事件和事件处理。
  第7章"数组"讨论了列表和值表的处理。在Java中,数组是对象,进一步说明了Java的面向对象的特点。我们讨论了把数据组织成同类型数据项的数组。本章介绍了多个单维数组和多维数组的例子。本章中的例子研究了一般的数组操纵、打印直方图、把数组传递给方法并介绍了调查数据分析领域(用简单的统计方法)。本章的特点之一是讨论基本的排序和查找技术,作为对线性查找的重大改进,介绍了折半查找。
  第8章"基于对象编程"开始了对类的深入讨论。本章描述了一种正确地讲授数据抽象的途径,即通过专用于实现新类型的语言(Java)。本章讨论了实现Java类、访问类成员、用访问修饰符(access modifier)实现信息隐藏、分离接口和实现、使用访问方法和实用方法(utility method)以及用构造函数初始化对象。本章讨论了常量的声明和使用、组合(composition)、this引用、static类成员以及流行的抽象数据类型(诸如堆栈和队列等)的例子。本章介绍了包语句,并讨论了如何创建可重用包。
  第9章"面向对象编程:继承"介绍了面向对象编程语言的最重要的能力--继承。继承是软件重用的技术,新类通过继承现有类的能力并增加新能力而创建。本章讨论了超类和子类的概念、访问修饰符protected、直接超类、间接超类、构造函数在超类和子类中的应用以及继承软件工程。本章还对继承("is a"关系)和组合("has a"关系)进行了比较。
  第10章"面向对象编程:多态性"是面向对象编程的另一基本能力,即多态行为。这种风格的编程通常用于实现目前流行的GUI框架,诸如Java的Swing。本章区别对待抽象类和具体类,并介绍了接口--Java用接口取代了C++的多重继承(虽然有风险但是功能强大)特性。本章介绍了功能强大的嵌套类概念,嵌套类有助于隐藏实现细节。然后,本章举例说明了第一个基于GUI的应用程序,为了更完整地介绍事件处理。在本节中,我们用嵌套类定义几个GUI组件的事件处理程序。本章的特色在于3个多态性案例分析--一个工资管理系统、一个通过抽象类形成的形状层次结构以及一个通过接口形成的形状层次结构。
  第11章"字符串和字符"讨论单词、句子、字符和字符组的处理。我们介绍了类String、StringBuffer、Character和StringTokenizer。我们还介绍了Java处理常规表达式的API(这些API对J2SE 1.4而言是新功能),它们使程序能够查找字符序列以找到与模式匹配的字符串。
第12章"图形和Java2D"是本书Java图形和多媒体功能部分的第1章。我们讨论了图形环境(graphic context)和图形对象;绘制字符串、字符和字节;颜色和字体控制;屏幕操纵和画图模式(paint mode);以及绘制直线、矩形、圆角矩形、三维矩形、椭圆形、弧形和多边形。我们介绍了Java2D API,这些API提供了强大的图形能力。图12.22举例说明了使用Java2D API创建复杂的图形效果有多容易。
  第13章"图形用户界面组件(一)"介绍了Java的几个Swing组件,它们用于创建用户友好的图形用户界面(GUI)。这些与平台无关的GUI组件完全用Java编写,使它们有极大的灵活性。Swing组件可以定制,看上去就像程序执行的计算机平台,或者可以使用标准的Java外观样式,以便在所有计算机平台上提供一个相同的用户界面。GUI开发的内容很丰富,因而用两章来介绍。这两章介绍的内容有一定深度,但足以使读者构建丰富多彩的用户界面。本章举例说明了GUI原理、javax.swing层次结构、标签、按钮、列表、文本字段、组合框、复选框、单选框、面板、鼠标事件处理、键盘事件处理以及用布局管理器放置组件。本章更深入地讨论了事件处理。
第14章"图形用户界面组件(二)"继续第13章开始的对Swing的讨论。本章通过程序、表和线图,说明了GUI设计原则、文本域、扩展Swing组件、滑动块、窗口、菜单、外观样式、多文档界面、调整窗格(tabbed pane)以及使用高级布局管理器。
  第15章"异常处理"非常重要。就创建"关键任务"或者"关键业务"的应用程序而言,本章是最重要的一章。程序员需要考虑,"当我要求组件执行某项工作遭遇麻烦时该怎么办?"要使用Java组件,不仅需要知道组件在正常情况下如何工作,还要知道异常情况下组件应该抛出什么异常。本章区别对待非常严重的系统错误和异常。本章讨论了异常处理的专有概念,包括try控制块、catch子句和finally子句。本章还介绍了J2SE 1.4中最新的链式异常工具。本章为本书其余部分的许多例子的讨论奠定了基础。
  第16章"多线程"讨论开发同时执行多个任务的Java程序。过去,由于处理器非常昂贵,计算机一般只用一个处理器。现在,处理器变得非常廉价,因此有可能建造多个处理器并行工作的计算机--这样的计算机称多处理机(multiprocessor)。显然,能够并行执行许多任务的计算机是发展趋势。正如我们将看到的,即使在单处理器系统上,多线程也是非常高效的。本章介绍多线程程序,举例说明了并发编程时会发生的问题。本章的特色是通过大量例子说明这些问题以及如何解决。本章讨论了线程和线程方法。用线程生命期的示意图简要说明了线程状态和状态转移。我们讨论了线程优先级和线程调度。分析了没有同步措施的生产者/消费者问题,并用线程同步措施解决了该问题。我们用一个循环缓冲器实现了一个生产者/消费者关系,并用一个监视器实现了正确的同步。我讨论了守护线程,它在处理器可用时"等待"和执行任务;讨论了接口Runnable,它使对象能够作为线程运行,而不必将Thread类分解成子类。
  第17章"文件和流"讨论通过文件的数据流完成输入/输出操作。在本章中,我们将对象转变成一种持久格式。能够以文件格式存储数据或者通过网络传输它(第18章),使程序能够保存数据及互相通信。本章首先介绍了数据层次结构,从位开始,到字节,再到字段,再到记录,最后到文件。接着介绍了Java的简单的文件和流视图。我们说明了程序如何把数据传递给辅助存储设备(诸如磁盘),以及程序如何检索已经存储在那些设备上的数据。我们讨论了类File,程序用该类获取有关文件和目录的信息。我们说明了如何把对象输出到辅助存储设备中,以及如何从辅助存储设备中输入对象;我们还介绍了高性能的、新I/O(New I/O,NIO)API(在J2SE 1.4中引入)。
  第18章"网络"讨论通过计算机网络进行通信的Java程序。本章介绍了Java的最低级的网络互联能力。本章举例说明了applet与执行它的浏览器进行交互、创建最小的Web浏览器、用基于流的套接字实现两个Java程序间的通信,以及用数据包实现两个Java程序间的通信。本章的一个重要特点是实现了网络Tic-Tac-Toe游戏,两个客户在一个多线程服务器仲裁下,用Tic-Tac-Toe互相争斗--这真是太好了!本章的最后一个例子是Deitel Messager案例分析,该案例分析、模拟了目前流行的即时通信应用,使用户能够通过Internet与朋友、亲戚和同事通信。该案例有1 130行代码,是一个多线程、客户/服务器的应用,它使用了我们已介绍的大多数编程技术。本章还继续对J2SE 1.4的NIO API进行了讨论,介绍了用于实现高性能网络服务器的选择器和无阻塞I/O。
  第19章"多媒体:图像、动画和声音"介绍了Java通过多媒体使程序"活"起来的能力。本章讨论了图像和图像操纵、声音和动画。我们介绍了一个图像应用程序。其中使用了一个图标。当用户的鼠标指针经过图标时,显示各种信息。一旦你阅读本章以后,你可能会迫切尝试这些技术,所以我们提供了许多练习,使你从中获得快乐。
  第20章"数据结构"对于大学二年级和三年级的课程特别重要。本章讨论了创建和操纵动态数据结构的技术,诸如链表、堆栈、队列和树。对每种数据结构,我们都提供了包含简单输出的例子。尽管如何实现这些类是很重要的,但是读者很快就会发现,它们所需的大部分数据结构都可以从类库中得到,诸如Java自带的java.util,对此我们将在第21~22章进行讨论。
  第21章"Java工具包和位操作"介绍几个java.util类,并讨论Java的位操纵运算符。一个特别有用的类是Vector。Vector是一个可以根据需要增长和减小的动态数组。我们还讨论了Stack,Hashtable,Properties,Random和BitSet。
  第22章"集合"讨论了集合API的java.util类,提供了第20章讨论的许多数据结构的实现。集合为Java程序员提供了一个标准的数据结构集,用于存储和检索数据;还提供了一个标准的算法(即过程)集,允许程序员操纵数据(诸如查找特定的数据项以及按降序或升序排列数据)。本章举例说明了集合(诸如链表、树、映射和集合),以及查找、排序和寻找最大值、寻找最小值的算法。
  第23章"用JDBC进行数据库连接"讨论Java对数据库技术的支持。目前最流行的数据库系统是关系型数据库。我们用IBM的Cloudscape介绍Cloudscape,Cloudscape是纯Java数据库管理系统。本章还介绍了JDBC,并用它连接到一个Cloudscape数据库,然后操纵该数据库的内容。我们用结构化查询语言(Structured Query Language,SQL)从数据库检索信息,以及把记录插入数据库。接下的两章介绍servlet和JavaServer Page,它们用本章讨论的技术构建数据驱动的Web应用程序。
  第24章"Servlet"讨论servlet。servlet扩展了Web服务器的功能。Servlet对于开发基于Web的方案是很有效的,servlet代表着客户与数据库交互,动态地产生定制内容供浏览器显示,并为每个客户维护惟一的会话信息。Java servlet API允许开发者给Web服务器增加处理客户请求的功能。servlet还可以在Web服务器间和平台间重用。本章举例说明了Web的请求/响应机制(主要用HTTP get和post请求),把请求重定向给其他资源,并通过JDBC与数据库交互。本章重点讨论了一个三层客户/服务器应用程序,跟踪了用户对一次调查的响应过程。
  第25章"JSP"介绍了servlet技术的一种扩展,称为JSP。JSP使提交动态产生的Web内容成为可能,目的是供Web设计者和其他不熟悉Java编程的人使用JSP。JSP可以包含scriptlet形式的Java代码。为了提高性能,每个JSP被编译成一个Java servlet--这通常在JSP第一次被客户请求时发生。随后的客户请求由已编译的servlet处理。本章重点讨论了一个三层服务器应用程序--guest-book,它把访问信息存储到一个数据库中。
附录A"运算符优先级表"列出了Java的每个运算符,并指出了它们的优先关系和结合性。
  附录B "ASCII字符集"列出了ASCII(American National Standard Code for Information Interchange,美国信息交换标准代码)字符集的字符,并指出了每个字符的值。Java使用16位的Unicode字符集表示全球重要的商业语言中的所有字符。Unicode以子集形式包含了ASCII。
  附录C"数值系统"讨论二进制(基数为2)、十进制(基数为10)、八进制(基数为8)和十六进制(基数为16)的数值系统。本  附录主要为计算机科学和计算机工程的入门课程而设计。
  附录D~F包含了对UML面向对象设计案例的分析、实现。在案例分析的综述部分讨论了这些实现。
  附录G"Unicode"讨论了Unicode字符集,它使Java能够以许多语言显示信息。该附录提供了一个示例Java程序,它以几种不同语言显示"Welcome to Unicode"。
UML面向对象设计案例分析概述(选学)
  在本节和下一节中,我们概述了本书选学内容的两个主要特征--可选的UML面向对象设计案例分析及设计模式的介绍。有关UML面向对象设计的案例分析是对本书的重要补充。本概述预览了"对象思考"的内容,并讨论了它们如何与案例分析关联。完成该案例分析以后,你就完成了一个重要的Java应用程序的面向对象设计和实现。
设计模式概述(选学)
  本书用5个选学部分讨论了设计模式。

目录:
   第1章 计算机、Internet和Web概述 1
1.1 本章简介 1
1.2 计算机是什么 2
1.3 计算机的构成 3
1.4 操作系统的演变 3
1.5 个人计算、分布式计算和客户/服务器计算 4
1.6 机器语言、汇编语言和高级语言 5
1.7 C++发展简史 6
1.8 Java发展简史 7
1.9 Java类库 7
1.10 FORTRAN、COBOL、Pascal和Ada 8
1.11 BASIC、Visual Basic、Visual C++、C#和.NET 9
1.12 Internet和WWW 9
1.13 典型Java环境基础 10
1.14 有关Java和本书的简要说明 12
1.15 有关对象的思考:对象技术及统一建模语言简介 14
1.16 设计模式初探 18
本章小结 19
第2章 Java应用程序介绍 25
2.1 本章简介 25
2.2 第一个Java程序 25
2.3 修改第一个Java程序 30
2.4 在一个对话框中显示文本 32
2.5 另一个Java应用程序:整数相加 35
2.6 内存概念 40
2.7 算术运算 41
2.8 等式和关系运算符 43
2.9 对象思想:问题陈述分析(选学) 48
本章小结 53
第3章 Java applet介绍 61
3.1 本章简介 61
3.2 Java 2软件开发工具包中的示范applet 61
3.3 简单的Java applet:绘制一个字符串 66
3.4 绘制字符串和直线 72
3.5 浮点数相加 74
3.6 网上资源 79
3.7 对象思想:确定问题陈述中的类(选学) 80
本章小结 84
第4章 控制结构(一) 88
4.1 本章简介 88
4.2 算法 88
4.3 伪码 88
4.4 控制结构 89
4.5 if单选结构 91
4.6 if…else选择结构 92
4.7 while循环结构 96
4.8 算法设计:案例分析1(计数器控制的循环) 98
4.9 自顶向下、逐步求精的算法设计:案例分析2 101
4.10 自顶向下、逐步求精的算法设计:案例分析3 106
4.11 复合赋值运算符 110
4.12 自增和自减运算符 111
4.13 基本数据类型 113
4.14 对象思想:确定类属性(选学) 114
本章小结 116
第5章 控制结构(二) 124
5.1 本章简介 124
5.2 计数器控制的循环的本质 124
5.3 for循环结构 126
5.4 for结构应用举例 129
5.5 do…while循环结构 133
5.6 switch多重选择结构 135
5.7 break和continue语句 138
5.8 带标号的break和continue语句 140
5.9 逻辑运算符 143
5.10 结构化编程小结 147
5.11 对象思想:确定对象的状态和活动(选学) 151
本章小结 154
第6章 方法 160
6.1 本章简介 160
6.2 Java中的程序模块 160
6.3 Math类的方法 161
6.4 方法声明 163
6.5 参数提升 168
6.6 Java API包 169
6.7 随机数生成 170
6.8 例子:概率游戏 173
6.9 声明的作用域 180
6.10 类JApplet的方法 182
6.11 方法重载 183
6.12 递归 185
6.13 递归应用举例:斐波纳契数列 187
6.14 递归与迭代 191
6.15 对象思想:确定类操作(选学) 192
本章小结 195
第7章 数组 206
7.1 本章简介 206
7.2 数组 206
7.3 数组的声明和创建 207
7.4 数组应用举例 208
7.5 引用和引用参数 216
7.6 把数组传递给方法 217
7.7 数组排序 219
7.8 数组查找:线性查找和二叉查找 221
7.9 多维数组 226
7.10 对象思想:对象间协作(选学) 231
本章小结 235
第8章 基于对象编程 251
8.1 本章简介 251
8.2 用类实现抽象数据类型:Time 252
8.3 类作用域 258
8.4 成员访问控制 258
8.5 使用this引用当前对象的成员 259
8.6 初始化类对象:构造函数 261
8.7 使用重载的构造函数 261
8.8 使用Set和Get方法 266
8.9 组合 271
8.10 垃圾收集 273
8.11 Static类成员 273
8.12 final实例变量 277
8.13 创建包 279
8.14 包访问 282
8.15 软件的重用性(software reusability) 284
8.16 数据抽象和封装 285
8.17 思考问题:开始编写电梯模拟器的类(选学) 286
本章小结 289
第9章 面向对象编程:继承 295
9.1 本章简介 295
9.2 超类和子类 296
9.3 protected成员 297
9.4 超类与子类的关系 298
9.5 案例分析:3级继承层次 311
9.6 子类的构造函数和终结方法 314
9.7 运用继承的软件工程 317
本章小结 318
第10章 面向对象编程:多态性 321
10.1 本章简介 321
10.2 继承层次结构中对象间的关系 322
10.3 多态性举例 326
10.4 抽象类和抽象方法 327
10.5 案例分析:继承接口和实现 328
10.6 final方法和类 334
10.7 案例分析:多态性在工资系统中的应用 335
10.8 案例分析:创建和使用接口 342
10.9 嵌套类 345
10.10 基本类型的类型包装类 355
10.11 对象思想:在电梯模拟器中结合继承(选学) 355
10.12 三种设计模式的探索(选学) 361
本章小结 366
第11章 字符串和字符 371
11.1 本章简介 371
11.2 字符和字符串的基本知识 371
11.3 String类 372
11.4 StringBuffer类 383
11.5 Character类 389
11.6 StringTokenizer类 394
11.7 模拟洗牌和发牌 395
11.8 正则表达式、Pattern类和Matcher类 398
11.9 对象思想:事件处理(选学) 406
本章小结 411
第12章 图形和Java2D 418
12.1 本章简介 418
12.2 图形环境和图形对象 419
12.3 颜色控制 420
12.4 字体控制 425
12.5 绘制线条、矩形和椭圆 429
12.6 绘制弧 431
12.7 绘制多边形和折线 433
12.8 Java2D API 435
12.9 对象思想:利用UML设计接口(选学) 440
本章小结 442
第13章 图形用户界面组件(一) 447
13.1 本章简介 447
13.2 Swing组件概述 448
13.3 JLabel 450
13.4 事件处理 452
13.5 文本字段 454
13.6 事件处理的工作机制 457
13.7 JButton 458
13.8 JCheckBox和JRadioButton 460
13.9 JComboBox 464
13.10 JList 466
13.11 多选列表 468
13.12 鼠标事件处理 470
13.13 适配器类 473
13.14 键盘事件处理 477
13.15 布局管理器 479
13.16 面板 485
13.17 对象思想:用例(选学) 486
本章小结 488
第14章 图形用户界面组件(二) 496
14.1 本章简介 496
14.2 JTextArea 496
14.3 创建定制的JPanel子类 499
14.4 能处理自身事件的JPanel子类 502
14.5 JSlider 506
14.6 窗口:特别注意 509
14.7 通过框架使用菜单 510
14.8 JPopupMenu 515
14.9 插入式外观和感觉 517
14.10 JDesktopPane和JInternalFrame 520
14.11 JTabbedPane 523
14.12 布局管理器:BoxLayout和GridBagLayout 525
14.13 对象思想:模型-视图-控制器(选学) 534
14.14 java.awt和javax.swing包的设计模式(选学) 541
本章小结 547
第15章 异常处理 552
15.1 本章简介 552
15.2 异常处理概述 552
15.3 异常处理举例:被0除 555
15.4 Java的异常层次结构 558
15.5 重新抛出异常 559
15.6 finally子句 560
15.7 清除堆栈 562
15.8 printStackTrace、getStackTrace和getMessage 564
15.9 链式异常 566
15.10 声明新的异常类型 567
15.11 构造函数与异常处理 568
本章小结 568
第16章 多线程 572
16.1 本章简介 572
16.2 线程状态:线程的生命期 573
16.3 线程优先级和线程调度 575
16.4 创建和执行线程 577
16.5 线程同步 579
16.6 未同步情况下的生产者/消费者关系 580
16.7 同步情况下的生产者/消费者关系 585
16.8 生产者/消费者关系:循环缓冲区 591
16.9 守护线程 599
16.10 Runnable接口 600
16.11 对象思想:多线程(选学) 604
16.12 设计模式探索:并行设计模式(选学) 608
本章小结 609
第17章 文件和流 614
17.1 本章简介 614
17.2 数据层次结构 614
17.3 文件和流 616
17.4 File类 619
17.5 创建顺序存取文件 623
17.6 读取顺序存取文件的数据 631
17.7 更新顺序存取文件 639
17.8 随机存取文件 639
17.9 创建随机存取文件 640
17.10 将数据随机写入随机存取文件 643
17.11 顺序读取随机存取文件的数据 647
17.12 案例分析:事务处理程序 650
17.13 Java平台的新I/O API 658
本章小结 663
第18章 网络 671
18.1 本章简介 671
18.2 操作URL 672
18.3 读取Web服务器上的文件 676
18.4 用流套接字建立一个简单的服务器 678
18.5 用流套接字建立一个简单的客户 680
18.6 以流套接字连接形式实现的客户/服务器交互 680
18.7 数据报形式的无连接客户/服务器交互 689
18.8 用多线程服务器实现的客户/服务器Tic-Tac-Toe游戏 694
18.9 网络与安全性 704
18.10 DeitelMessager聊天系统的服务器和客户 704
18.11 NIO联网概述 724
18.12 java.io和java.net包中使用的设计模式(选学) 733
18.13 本章小结 737
第19章 多媒体:图像、动画和声音 742
19.1 本章简介 742
19.2 图像加载、显示和缩放 743
19.3 使一系列图像成为动画 745
19.4 图像映射 748
19.5 加载和播放音频剪辑 750
19.6 网上资源 752
19.7 对象思想:视图中的动画和声音(选学) 753
本章小结 762
第20章 数据结构 766
20.1 本章简介 766
20.2 自引用类 766
20.3 动态内存分配 767
20.4 链表 767
20.5 堆栈 775
20.6 队列 779
20.7 树 781
本章小结 786
第21章 Java工具包和位操作 802
21.1 本章简介 802
21.2 Vector类和Enumeration接口 802
21.3 java.util包的Stack类 805
21.4 Hashtable类 807
21.5 Properties类 810
21.6 位操作和位运算符 815
21.7 BitSet类 824
本章小结 827
第22章 集合 831
22.1 本章简介 831
22.2 集合概述 831
22.3 类Arrays 832
22.4 接口Collection和Collections类 835
22.5 List 835
22.6 算法 840
22.7 Set 848
22.8 Map 850
22.9 同步包装类 852
22.10 不可修改的包装类 853
22.11 抽象实现 853
22.12 包java.util中使用的设计模式(选学) 853
本章小结 855
第23章 用JDBC进行Java数据库连接 858
23.1 本章简介 858
23.2 关系型数据库 858
23.3 关系型数据库概述:books数据库 859
23.4 SQL 862
23.5 在Cloudscape中创建books数据库 869
23.6 用JDBC操纵数据库 870
23.7 存储过程 881
23.8 网上资源 882
本章小结 882
第24章 Servlet 887
24.1 本章简介 887
24.2 servlet概述及其构架 889
24.3 处理HTTP get请求 892
24.4 处理包含数据的HTTP get请求 900
24.5 处理HTTP post请求 902
24.6 将请求重定向到其他资源 904
24.7 多层应用程序:在servlet中使用JDBC 907
24.8 网上资源 912
本章小结 912
第25章 JSP 917
25.1 本章简介 917
25.2 JSP概述 917
25.3 第一个JSP例子 918
25.4 隐式对象 920
25.5 脚本 921
25.6 标准动作 924
25.7 指令 934
25.8 案例分析:访客登记 936
25.9 网上资源 945
本章小结 945
附录A 运算符优先级表 949
附录B ASCII字符集 951
附录C 数值系统 952
C.1 简介 952
C.2 将二进制数简化为八进制和十六进制数 954
C.3 将八进制和十六进制数转换为二进制数 955
C.4 将二进制、八进制和十六进制数转换为十进制数 955
C.5 将十进制数转换为二进制、八进制或十六进制数 956
C.6 负的二进制数:补码表示法 957
C.7 小结 958
附录D 电梯事件和监听者接口 962
D.1 简介 962
D.2 事件 962
D.3 Listener 964
D.4 制品回顾 966
附录E 电梯模型 968
E.1 简介 968
E.2 ElevatorSimulation类 968
E.3 Location类和Floor类 973
E.4 Door类和ElevatorDoor类 975
E.5 Button类 978
E.6 ElevatorShaft类 980
E.7 Light类和Bell类 984
E.8 Elevator类 987
E.9 Person类 992
E.10 制品回顾 997
E.11 结论 998
附录F 电梯视图 999
F.1 简介 999
F.2 类的对象 1009
F.3 类的常量 1010
F.4 类的构造函数 1011
F.5 事件处理 1013
F.6 制品回顾 1016
F.7 结论 1016
附录G Unicode 1017
G.1 概述 1017
G.2 Unicode转换格式 1018
G.3 字符和字形 1019
G.4 Unicode的优缺点 1019
G.5 Unicode协会的网站 1020
G.6 使用Unicode 1021
G.7 字符范围 1022
小结 1023
 
Copyright ©1998~2004 华储网. All rights reserved。
To comment on this site,E-mail :
webmaster@huachu.com.cn
<% set rs=nothing conn_tsmlk.close set conn_tsmlk=nothing endtime=timer() response.write "页面执行时间:"&FormatNumber((endtime-startime)*1000,3)&"毫秒" %>