美丽的建筑已经超出了科学的范畴。
它们是真正的有机体,蕴含着精神;它们是艺术作品,
在灵感的驱动下,采用了最好的技术,而不仅仅是一种尝试,或者委员会思想的折中。
——弗兰克·劳埃德·怀特。
Java编程语言已经在世界范围内被软件开发者和Internet内容提供商热情接受。在Internet的任何角落,Internet和WWW(World Wide Web)用户都能从访问安全的、独立于平台的应用程序上获益。采用Java编程语言开发应用程序的开发者也将受益匪浅,因为他们只要编写一次代码,而不必关心应用程序在各个软硬件平台上的移植问题。
对很多人而言,了解Java语言是从将它作为WWW中构建applet的工具开始的。applet是在Web页面内运行的applet。当applet在下载以后,可以在不使用Web服务器资源的情况下执行任务,以及与用户交互。当然,某些applet可能会与服务器交互,但这是由applet的应用逻辑决定的。
Java编程语言对Web这样的分布式网络环境是非常有用的。但是,Java远不止应用在这个领域,它完全可以作为强大的通用编程语言,编写不依赖网络功能的程序以及其他应用程序。对很多机构而言,在远程主机上以安全的方式运行下载的代码是关键的需求。
有些团队将Java作为通用编程语言,用于开发机器独立性相对次要的项目。Java的易于编程和安全特性使用户可以快速地产生工作代码。由于得益于Java的垃圾收集和类型安全引用等特性,某些常见的编程错误永远不会出现。多线程支持符合时新的基于网络和图形用户界面的应用程序,这些应用程序必须同时参加多个任务,而异常处理机制则简化了错误情况的处理。尽管Java的内建工具很强大,但它仍然是一门简单的语言,程序员能够很快地上手。
Java编程语言被设计成具有最大程度的可移植性,尽可能地减少实现依赖性。例如,int型在所有实现中都是32位有符号的二进制补码整数,而不管运行程序的CPU体系结构如何。在定义好有关语言的部分之后,利用Java运行环境,用户就可以在任何地方运行编译过的代码,并和任何有Java运行环境的人共享代码。
关于本书
本书向熟悉基本编程概念的人讲述Java编程语言。本书解释了Java语言,但不是晦涩的正式介绍,也没有覆盖Java语言的所有方面。虽然本书在定义通用术语时包含了面向对象的某些方面,但本书不是介绍面向对象编程的。本系列图书中的其他各卷以及大量的在线文档,专门就applet、图形界面、数据库、组件和其他特定类型的编程任务进行详细论述。对于其他参考资料,你可以参见563页,的“进一步阅读指南”。
本书的第三版介绍了Java2平台的变化,例如,新的stricrfp关键字、集合类、引用对象等,就像在Java2SDK1.3版标准版(有时简称为JDKl.3或1.3)中实现的那样。你还会注意到本书对其他主要的包也进行了简要的介绍。如果你曾经阅读过本书的第二版,就会发现新版中很多内容已经改写,从而更好地表述语言的特性——例如嵌套类和接口——以及API的类。新版将提供大量的新内容,但由于Java语言的大部分内容没有发生变化,并且大多类主要的包类型都还可沿用,所以,你应该更多地关注新内容。
Java编程语言具有目前大部分编程语言所共有的一些特征。对C和C++程序员而言,Java语言看起来很面熟,因为它设计时采用了与C和C++相似的结构,而大部分语言在这方面是类似的。那就是说,本书既不是比较分析,也不是“过渡”教程——我们不假设读者具有C和C++的知识。尤其是C++程序员,可能会因为已有的知识而妨碍对Java的理解,就像这些知识曾经在其他方面对他们带来的帮助那样。
第1章“Java概述”描述了Java语言的概貌。不熟悉面向对象编程理念的程序员应该细读本章,熟悉面向对象编程范例的程序员也将发现本章是对Java语言面向对象特性的有意义介绍。
第2、3、4、5章涵盖了Java语言面向对象的核心特征,即定义程序组件的类声明,以及根据类定义的对象构造。第2章“类和对象”描述了Java的基础。第3章“继承类”描述了如何从已有类进行继承,或者说创建子类,即创建一个具有附加数据和行为的新类。第4章“接口”描述如何声明对类的行为进行抽象描述的接口类型,接口类型为类的设计和实现提供了最大的灵活性。第5章“嵌套类和接口”描述了如何在其他类和接口中声明
类和接口,并解释了这样做可以带来的好处。
第6、7章涵盖对所有语言而言都类似的部分。第6章“语言符号、运算符和表达式”描述了用于构建语句的语言符号,如何用语言符号和运算符建立表达式,以及表达式的计算过程。第7章“控制流”描述了控制语句如何控制语句执行的顺序。
第8章“异常”描述了Java语言强大的错误处理能力。第9章“字符串”描述了String对象的内建方法,以及对它的运行支持。
第10章“线程”解释了Java对多线程的处理机制。许多应用程序,例如,图形界面的软件,必须同时参与多个任务。这些任务必须相互协作,以确保各自行为的正确性,而线程满足了多任务协作的要求。
第11章“用类型编程”描述了与类型相关的类:描述每个类和接口的单个对象,以及将整型和浮点型等基本数据类型包装成自身对象类型的包装类。
. 第12章“垃圾回收和存储管理”讲述垃圾收集、终结化和低强度(lower-strongth)引用对象。
第13章“包”描述如何将一组类和接口打成包。
第14章“文档化注释”展示如何在注释中撰写参考文档。
第15~19章描述主要的包。第15章“I/O包”描述了基于Stream的输入/输出系统。第16章“集合”描述了set和list等集合类。第17章“其他工具”描述了utility类的剩余部分,如Bitset和随机数产生器。第18章“系统编程”讲述System类,该类提供了访问底层平台的功能。第19章“国际化与本地化”描述了支持编写可在多种语言和文化环境下运行的程序的一些工具。
第20章“标准包”简单介绍了作为标准平台一部分的其他包,这些包在本书中并没有详细介绍。
附录A“运行时异常”列出了运行时系统自身能够抛出的所有运行时异常和错误。
附录B“有用的表格”将快速参考时可能用到的实用信息以表格的形式列出。
最后,“进一步阅读指南”部分列出想了解Java语言的全面细节、面向对象、线程编程、软件设计和其他主题时的参考资料清单。
示例和文档
本书中所有的示例代码都在本书完成时,用最新的语言版本(Java 2 SDK,标准版1.3版本)编译并运行通过。本书只讨论支持的特征——不建议使用的类型、方法和域都忽略了,除非不得已。我们没有停留在编写编译通过的程序,而将如何用好语言作为学习语言的一部分。因而,我们试图在本书中探讨一些优秀的编程风格及程序设计原则。
有时,我们需要参考在线文档。通过文档化注释,Java开发环境提供了从已编译类中自动产生文档(通常为HTML文档)的方式。这种文档一般通过Web浏览器来阅读。
致谢(第一版)
任何一本技术书籍的撰写都不仅仅是作者自己的行为,我们写这本书就得到了很多人的帮助,他们为我们提供了技术帮助、精彩的评论、有用的信息以及书籍撰写的建议。
Trilithon软件公司的Henry McGilton编辑纠正了很多编辑错误,使得该书得以出版。
丛书编辑Lisa Freiendly为我们提供了有力的支持。
许多称职的书评家忙里偷闲对本书进行了评阅、编辑、建议、修改,删除了本书中的某些不当之处,所有这一切都使本书更加完美。Kevin Coyle在各方面都是本书最详尽的评阅者。Karen Bennet、Mike Burati、Patricia Giencke、Steve Gilliard、Bill Joy、Rosanna Lee、Jon Madison、Brian O'Neill、Sue Palmer、Stephen Perelgut、R.Ander Schneiderman、Susan Sim、Bob Sproull、Guy Steele、Arthur van Hoff、Jim Waldo、Greg Wilson和Ann Wollrath都提供了深度评论。Geoff Arnold、Tonm Cargill、Chris Darke、Pat Finnegan、Mike Jordan、Doug Lea、Randall Murray、Roger Riggs、Jimmy Torres、Arthur van Hoff和Frank Yellin贡献了有价值的评论和关键部分的技术信息。
Alka Deshpande、Sharon Flank、Nassim Fotouhi、Betsy Halstead、Kee Hinckley、Dr.K.Kalyannsundaram、Patrick Martin、Paul Romagna、Susan Snyder和Nicole Yankelovich合作创造了140页和406页的五个非ISO-Latin—1单词。Jim Arnold作了关于“smoog”和“moorge”的正确发音、用法和词源方面的研究。Ed Mooney帮助我们准备了文档。Herb和Joy则是我们的克罗地亚语言顾问。Cookie Callahan,Robert E.Pierce和Rim Tavilla在很多时候提供了必要的支持,使本书的写作得以继续进展,否则我们将陷于激烈的争执中。
感谢Kim Polese为我们总结了为何Java语言对计算机用户和程序员同样重要。
Susan Jones、Bob Sproull、Jim Waldo和Ann Wollrath等在关键时刻提供了支持和建议。还要感谢我们的家庭,如果没有他们在生活方面的支持,我们很可能在工作中就坚持不下去,深深地感谢他们。
感谢Peet's Coffee and Tea店的人们,他们使我们能够展开世上最好的Java讨论。
致谢(第二版)
第二版要感谢的人和第一版很相似。
丛书编辑Lisa Friendly继续提供支持和关心。评阅者的数量有所减少,也与第一版有重复,但给予我们的帮助是同样的和完全的。Steve Byrne、TomCargill、Mary Dageforde、Tim Lindholm和Rob Murray从头至尾审阅了本书,使本书的表述更加清晰。Brian Beck、Peter Jones、Doug Lea、Bryan O'Sullivan、Sue Palmer、Rosanna Lee、Lora Park、Mark Reinhold、Roger RIggs、Ann Wollrath和KenZadek集中审阅了关键的章节。Guy Steele的支持是一贯的和热情的。衷心感谢Rosemary Simpson为形成本书有用的索引而付出的一切。Carla
Carlson和Helen Leary给予了后勤支持,使所有的工作能有序进行。GerryWiener提供了406页上的西藏词语,GraigPreston和Takao Miyatani也提供了这方面的帮助。所有提供勘误表和建议的人都对我们有所帮助。
由于某种原因,我们在最初的致谢中遗漏了Addison-Wesley的朋友们——幸亏在第二版出版时他们大部分还在。两个版本的所有编辑包括KateDuffy、Rosa Gonzales、Mike Hendrickson、Marina LAng、Shannon Patti、Many Rabinoeitz、Sarah Weaver和Pamela Yee。其他付出很多的人我们已经记不清了,但对他们我们同样致以诚挚的谢意。
修订版还得到Josh Bloch、Joe Fialli、Jimmy Torres、Benjamin Renaud、Mark Reinhold、Jen Volpe和Ann Wollrath的额外帮助。
Peet's Coffee and Tea店仍然是我们的咖啡提供者。
致谢(第三版)
第三版需要更多的审阅和工作,而帮助者们同样关键。Lisa Friendly的继续支持使项目正常进行;有时我们比以前合作得更好。评阅者中既有新面孔又有老朋友,但对我们的帮助是同样的,具体包括:Joshua Bloch、Joseph Bowbeer、Gilad Bracha、Keith Edwards、Joshua Engle、Rich Gillan、Peter Haggar、Cay Horstmann、Andrew M.Morgan、Ray Ortigas、Brian Preston、Mark Schuldenfrei、Peter Sparago、Guy Steele、Antoine Trax,以及我们的俄罗斯朋友Leonid Arbouzov、Valery shakurov、Viatcheslav Rybalov、Eugene Latkin、Dmitri Khukhro、Konstantin Anisimov、Alexei Kaigorodov、Oleg Oleinik和Maxim Sokolnikov。以下人员关注如何使事情做得更好:Peter Jomes、Robert W.Scheifler、Susan Snyder、Guy Steele、Jimmy Torres和Ann Wolkath。Helen Leafy一如既往地将后勤保障工作做得很好。
Addison-Wesley的团队提供了物质支持,他们是JuUe DiNicola、Mike Hendrichson和Tracy Russ。
从最后一版开始,东海岸的Peet's Coffee and Tea店开张了。本书写作团队中,住在东部的人员也能经常品尝到美妙的咖啡了。世界继续在急速进步。
尽管所有人员都做了不懈的努力,本书中肯定还存在各种错误和不足,这些都是作者们的责任。
成果!朋友,尽管我已取得许多成果,
但我知道几千种是不能满足要求的。
——托马斯·爱迪生*