标题：高级Java编程思想
基本信息
原书名：Thinking in Java (4th Edition)
原出版社： Prentice Hall PTR
作者：(美)Bruce Eckel  
译者：陈昊鹏
丛书名： 计算机科学丛书
出版社：机械工业出版社
ISBN：9787111213826
出版日期：2007 年6月
开本：16开
页码：880
版次：4-1
编辑推荐
本书是全球程序员必备图书《Java编程思想》的最新版本
本书曾获：
被china-pub会员评为“2007年我最喜爱的十大技术图书”之一
2003年《Software Development》杂志最佳书籍Jolt大奖
2003年《Java Developer’s Journal》读者选择最佳书籍奖
2001年《Java World》编辑选择最佳书籍奖
2000年《Java World》读者选择最佳书籍奖
1999年《Software Development》杂志最佳产品奖
1998年《Java Developer’s Journal》编辑选择最佳书籍奖
内容简介
本书赢得了全球程序员的广泛赞誉，即使是最晦涩的概念，在bruce eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从java的基础语法到最高级特性（深入的面向对象概念、多线程、自动项目构建、单元测试和调试等），本书都能逐步指导你轻松掌握。
从本书获得的各项大奖以及来自世界各地的读者评论中，不难看出这是一本经典之作。本书的作者拥有多年教学经验，对c、c++以及java语言都有独到、深入的见解，以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章，包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、java i/o系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容，包含了java语言基础语法以及高级特性，适合各个层次的java程序员阅读，同时也是高等院校讲授面向对象程序设计语言以及java语言的绝佳教材和参考书。
第4版特点：
适合初学者与专业人员的经典的面向对象叙述方式，为更新的java se5/6增加了新的示例和章节。
测验框架显示程序输出。
设计模式贯穿于众多示例中：适配器、桥接器、职责链、命令、装饰器、外观、工厂方法、享元、点名、数据传输对象、空对象、代理、单例、状态、策略、模板方法以及访问者。
为数据传输引入了xml，为用户界面引入了swt和flash。
重新撰写了有关并发的章节，有助于读者掌握线程的相关知识。
专门为第4版以及java se5/6重写了700多个编译文件中的500多个程序。
支持网站包含了所有源代码、带注解的解决方案指南、网络日志以及多媒体学习资料。
覆盖了所有基础知识，同时论述了高级特性。
详细地阐述了面向对象原理。
在线可获得java讲座cd，其中包含bruce eckel的全部多媒体讲座。
网站上可以观看现场讲座、咨询和评论。
专门为第4版以及java se5/6重写了700多个编译文件中的500多个程序。
支持网站包含了所有源代码、带注解的解决方案指南、网络日志以及多媒体学习资料。
覆盖了所有基础知识，同时论述了高级特性。
详细地阐述了面向对象原理。
在线可获得java讲座cd，其中包含bruce eckel的全部多媒体讲座。
网站上可以观看现场讲座、咨询和评论。
目录
读者评论
前言
简介
第1章 对象导论
1.1 抽象过程
1.2 每个对象都有一个接口
1.3 每个对象都提供服务
1.4 被隐藏的具体实现
1.5 复用具体实现
1.6 继承
1.6.1 “是一个”（is-a）与“像是一个”（is-like-a）关系
1.7 伴随多态的可互换对象
1.8 单根继承结构
1.9 容器
1.9.1 参数化类型（范型）
1.10 对象的创建和生命期
1.11 异常处理：处理错误
1.12 并发编程
1.13 java与internet
1.13.1 web是什么
1.13.2 客户端编程
1.13.3 服务器端编程
1.22 总结
第2章 一切都是对象
2.1 用引用操纵对象
2.2 必须由你创建所有对象
2.2.1 存储到什么地方
2.2.2 特例：基本类型
2.2.3 java中的数组
2.3 永远不需要销毁对象
2.3.1 作用域
2.3.2 对象的作用域
2.4 创建新的数据类型：类
2.4.1 域和方法
2.4.2 基本成员默认值
2.5 方法、参数和返回值
2.5.1 参数列表
2.6 构建一个java程序
2.6.1 名字可见性
2.6.2 运用其他构件
2.6.3 static 关键字
2.7 你的第一个java程序
编译和运行
2.8 注释和嵌入式文档
2.8.1 注释文档
2.8.2 语法
2.8.3 嵌入式html
2.8.4 一些标签示例
2.8.5 文档示例
2.9 编码风格
2.10 总结
2.11 练习
第3章 操作符
3.1 更简单的打印语句
3.2 使用java操作符
3.3 优先级
3.4 赋值
3.4.1 方法调用中的别名问题
3.5 算术操作符
3.5.1 一元加、减操作符
3.6 自动递增和递减
3.7 关系操作符
3.7.1 测试对象的等价性
3.8 逻辑操作符
3.8.1 短路
3.9 直接常量
3.9.1 指数记数法
3.10 按位操作符
3.11 移位操作符
3.12 三元操作符 if-else
3.13 字符串操作符 + 和 +=
3.14 使用操作符时常犯的错误
3.15 类型转换操作符
3.15.1 截尾和舍入
3.15.2提升
3.16 java没有“sizeof”
3.17 操作符小结
3.18 总结
第4章 控制执行流程
4.1 true和false
4.2 if-else
4.3 迭代
4.3.1 do-while
4.3.2 for
4.3.3 逗号操作符
4.4 foreach语法
4.5 return
4.6 break和 continue
4.7 臭名昭著的“goto”
4.8 switch
4.9 总结
第5章 初始化与清理
5.1 用构造器确保初始化
5.2 方法重载
5.2.1 区分重载方法
5.2.2 涉及基本类型的重载
5.2.3 以返回值区分重载方法
5.3 缺省构造器
5.4 this关键字
5.4.1 在构造器中调用构造器
5.4.2 static的含义
5.5 清理：终结处理和垃圾回收
5.5.1 finalize()的用途何在
5.5.2 你必须实施清理
5.5.3 终结条件
5.5.4 垃圾回收器如何工作
5.6 成员初始化
5.6.1 指定初始化
5.7 构造器初始化
5.7.1 初始化顺序
5.7.2. 静态数据的初始化
5.7.3. 显式的静态初始化
5.7.4. 非静态实例初始化
5.8 数组初始化
5.8.1 可变参数列表
5.9 枚举类型
5.10 总结
第6章 访问权限控制
第7章 复用类
第8章 多态
第9章 接口
第10章 内部类
第11章 持有对象
第12章 通过异常处理错误
第13章 字符串
第14章 类型信息
第15章 泛型
第16章 数组
第17章 容器深入研究
第18章 java i/o系统
第19章 枚举类型
第20章 注解
第21章 并发
第22章 图形化用户界面
附录a 补充材料
可下载的补充材料
thinking in c：java的基础
java编程思想 研讨课
hands-on java研讨课cd
thinking in objects研讨课
thinking in enterprise java
thinking in patterns(with java)
thinking in patterns研讨课
设计咨询与复审
附录b 资源
软件
编辑器与ide
书籍
分析与设计
python
我的著作列表
索引
译者序
时隔两年多，《Java编程思想（第4版）》的中文版又要和广大Java程序员和爱好者们见面了。这是Java语言本身不断发展和完善的必然要求，也是本书作者Bruce Eckel孜孜不倦的创作激情和灵感所结出的硕果。.
《Java编程思想（第4版）》以Java最新的版本JDK5.0为基础，在第3版的基础上，添加了最新的语言特性，并且对第3版的结构进行了调整，使得所有章节的安排更加遵照循序渐进的特点，同时每一章的内容在分量上也都更加均衡，这使读者能够更加容易地阅读本书并充分了解每章所讲述的内容。在这里我们再次向Bruce Eckel致敬，他不但向我们展示了什么样的书籍才是经典书籍，而且还展示了经典书籍怎样才能精益求精，长盛不衰。
Java已经成为了编程语言的骄子。我们可以看到，越来越多的大学在教授数据结构、程序设计和算法分析等课程时，选择以Java语言为载体。这说明Java语言已经是人们构建软件系统时主要使用的一种编程语言。但是，掌握好Java语言并不是一件可以轻松完成的任务，如何真正掌握Java语言，从而编写出健壮的、高效的以及灵活的程序是Java程序员们面临的重大挑战。..
《Java编程思想（第4版）》就是一本能够让Java程序员轻松面对这一挑战，并最终取得胜利的经典书籍。本书深入浅出、循序渐进地把我们领入Java的世界，让我们在不知不觉中就学会了用Java的思想去考虑问题、解决问题。本书不仅适合Java的初学者，更适合于有经验的Java程序员，这正是本书的魅力所在。但是，书中并没有涵盖Java所有的类、接口和方法，因此，如果你希望将它当作Java的字典来使用，那么显然就要失望了。
我们在翻译本书的过程中力求忠于原著，为了保持连贯性，对原书第3版中仍然保持不变的部分，我们对译文除了个别地方之外，也没做修改。对于本书中出现的大量的专业术语尽量遵循标准的译法，并在有可能引起歧义之处注有英文原文，以方便读者对照与理解。
全书由陈昊鹏翻译，郭嘉也参与了部分翻译工作。由于水平有限，书中出现错误与不妥之处在所难免，恳请读者批评指正。...
译 者
2007年5月
前言
一开始，我只是将Java看作“又一种程序设计语言”。从许多方面看，它也的确如此。.
但随着时间流逝，以及对Java的深入研究，我渐渐发现，与我所见过的其他编程语言相比，Java有着完全不同的核心目的。
程序设计其实是对复杂性的管理：待解决问题的复杂性，以及用来解决该问题的工具的复杂性。正是这种复杂性，导致多数程序设计项目失败。在我所知的所有程序设计语言中，几乎没有哪个将自己的设计目标专注于克服开发与维护程序的复杂性。当然，有些编程语言在设计决策时也曾考虑到复杂性的问题，然而，总是会有其他议题被认为更有必要加入到该语言中。于是不可避免地，正是这些所谓更必要的议题导致程序员最终“头撞南墙”。例如，C++选择向后兼容C（以便更容易吸引C程序员），以及具备C一样的高效率。这两点都是非常有益的设计目标，也确实促成了C++的成功，然而它们却暴露出更多的复杂性问题，而这也使得很多项目不得善终（你自然可以责怪程序员或者项目管理，但是，如果一种语言能够帮助你解决错误，那何乐而不为呢？）。再看一个例子，Visual Basic（VB）选择与Basic绑在一起，而Basic并未被设计为具备可扩展性的程序设计语言，结果呢，建立在VB之上的所有扩展都导致了无法维护的语法。还有Perl，它向后兼容awk、sed、grep，以及所有它打算替代的Unix工具，结果呢，人们开始指责Perl程序成了“不可阅读（write-only）的代码”（即，只要稍过一会儿，你就读不懂刚完成的程序了）。从另一个角度看，在设计C++、VB、Perl以及Smalltalk之类的程序设计语言时，设计师也都为解决复杂性问题做了某种程度的工作。并且，正是解决某类特定问题的能力，成就了它们的成功。
随着对Java的了解越来越深，Sun对Java的设计目标给我留下了最深刻印象，那就是：为程序员减少复杂性。用他们的话说就是：“我们关心的是，减少开发健壮代码所需的时间以及困难。”在早期，这个目标使得代码的运行并不快（Java程序的运行效率已经改善了），但它确实显著地缩短了代码的开发时间。与用C++开发相同的程序相比，采用Java只需一半甚至更少的开发时间。仅此一项，就已经能节约无法估量的时间与金钱了。然而Java并未止步于此。它开始着手解决日渐变得重要的各种复杂任务，例如多线程与网络编程，并将其作为语言特性或以工具库的形式纳入Java，这使得开发此类应用变得倍加简单。最终，Java解决了一些相当大的复杂性问题：跨平台编程、动态代码修改，甚至是安全的议题。它让你在面对其中任何一个问题时，都能从“举步维艰”到“起立鼓掌”。抛去我们都能看到的性能问题，Java确实非常精彩地履行了它的诺言：极大地提升程序员的生产率。
同时，Java正从各个方面提升人们相互通讯的带宽。它使得一切都变得更容易：编写程序，团队合作，创建与用户交户的用户界面，在不同类型的机器上运行程序，以及编写通过因特网通信的程序。
我认为，通讯变革的成果并不见得就是传输巨量的比特。我们所看到的真正变革是人与人之间的通讯变得更容易了：无论是一对一的通信，还是群体与群体之间，甚至整个星球之间的通信。我曾听闻，在足够多的人之间的相互联系之上，下一次变革将是一种全球意识的形成。Java说不定就是促进该变革的工具，至少，它所具备的可能性使我觉得，教授这门语言是非常有意义的一件事情。
Java SE5与SE6
本书的第4版得益于Java语言的升级。Sun起初称其为JDK1.5，稍后改作JDK5或J2SE5，最终Sun弃用了过时的“2”，将其改为Java SE5。Java SE5的许多变化都是为了改善程序员的体验。你将会看到，Java语言的设计者们并未完全成功地完成该任务，不过，总的来说，他们已经向正确的方向迈出了一大步。 新版的一个重要目标就是完整地吸收Java SE5/6的改进，并通过本书介绍以及应用这些变化。这意味着本书基本可以称之为“只限Java SE5/6”。并且，书中的多数代码并没有经过老版本的Java编译测试，所以如果你使用的是老版本的Java，编译可能会报错并中止。不过，我觉得这样利大于弊。
如果你不得不采用老版本的Java，我仍然为你提供了本书早期版本的免费下载。基于某些原因，我决定不提供本书当前版本的免费电子版。
Java SE6
本书是一个非常耗时的，且具有里程碑意义的一个项目。就在本书出版之前，Java SE6（代号野马mustang）已经发布了beta版。虽然Java SE6中的一些小变化，对书中的代码示例有一点影响，但其主要的改进对本书的绝大部分内容并没有影响。因为Java SE6主要关注于提升速度，以及改进一些（不在本书讨论范围之内）类库的特性。
本书中代码全部用Java SE6的一个发布候选版（RC）进行过测试，因此我不认为Java SE6正式发布时会有什么变化能够影响本书的内容。如果到时真的有什么重要的改变，我将更新本书中的代码，你可以下载。
本书的封面已经指出，本书面向“Java SE5/6”。也就是说本书的撰写“面向Java SE5及其为Java语言引入的重大变化，同时也适用于Java SE6”。..
第4版
为一本书写作新版时，作者最满意的是：把事情做得“恰如其分”。这是我从本书上一个版本发布以来所学到的东西。通常而言，这种见识正如谚语所云，“学习就是从失败中汲取教训。”并且，我也借机进行了一些修订。与往常一样，一个新的版本必将带来引人入胜的新思想。此时，新发现带来的喜悦，采用比以往更好的形式表达思想的能力，已经远远超过了可能引入的小错误。
这也是对不断在我脑中盘旋低语着的一种挑战，那就是让持有本书老版本的读者也愿意购买新的版本。这些促使着我尽可能改进，重写，以及重新组织内容，为热忱的读者们献上一本全新的，值得拥有的书。
改变
此版本中将不再包含以往本书中所携带的CD光盘。该CD中的重要部分《Thinking in C》的多媒体教程（由Chuck Allison为MindView创建），现在提供了可下载的Flash版本。该教程是为不熟悉C语法的读者所准备的。虽然，本书用了两章对语法做了较为完整的介绍，然而对于没有相应背景知识的读者而言，这也许仍然不够。而《Thinking in C》正是为了帮助这些读者提升到必要的程度。
完全重写了“并发”这一章（以前称为“多线程”），以符合Java SE5并发类库的重大改变。它将为读者了解并发的核心思想打下基础。如果没有这些核心的基础知识，读者很难理解关于线程的更复杂的议题。我花了很多个月撰写这一章，深陷“并发”的地狱之中，最终，这一章不仅涵盖了基础知识，而且大胆地引入了一些高级议题。
而对于Java SE5所具有的每一个重大的新特性，本书都有一个新的章节与之对应。其他的新特性则加入到了原有的章节中。我还一直在研究设计模式，因此在本书中，也介绍了设计模式的相关内容。
媒体评论
我见过的最好的Java书！您做了一项了不起的工作。您的深度令人赞叹，出版的时候，我一定会购买一本。我从1996年10月就开始学习Java，其间也读过好几本这方面的书，但我觉得您这本才是“必读书”。最近几个月，我一直集中精力于一个完全用Java开发的产品。您的书帮我夯实了某些不牢固的知识点，并拓展了我的知识面。我甚至在面试签约者时引用书中的内容，作为参考的依据。通过问一些我从书中学到的知识，来判断他们对Java的理解程度（例如，数组与Vector的区别）。您的书真是伟大！
Steve Wilkinson, 资深专家, MCI 电信公司
每个Java程序员都应该反复研读《Think in Java》，并且随身携带以便随时参考。书中的练习颇具挑战性，而有关集合的章节已臻化境！本书不仅帮助我通过了Sun Certified Java Programmer考试，而且它还是我遇到Java问题时，求助的首选书籍。
——Jim Pleger, Loudoun郡（弗吉尼亚）政府
这本书比我见过的所有Java书都要好得多。循序渐进……非常完整，并搭配恰到好处的范例，睿智而不呆板的解说……这使本书的品质比别的书“超出了一个数量级”。与其他Java书相比，我发现本书考虑非常周全、前后一致、理性坦诚、文笔流畅、用词准确。恕我直言，这是一本学习Java的理想书籍。
——Anatoly Vorobey, 以色列海法Technion大学
在我所见过的程序设计指南中（无论何种语言），这绝对是最好的一本。
——Joakim Ziegler, FIX系统管理员
感谢您这本精彩的、令人愉快的Java书。
——Dr. Gavin Pillay, 登记员, 南非爱德华八世医院
再次感谢您这本杰出的书。作为一名不用C语言的程序员，我曾经感到（学习Java）步履维艰，但是您的书让我一目了然。能够一开始就理解底层的概念和原理，而不是通过反复试验来自己建立概念模型，真是太棒了。我希望能在不久的将来参加您的讨论课。
——Randall R. Hawley, 自动化工程师, Eli Lilly公司
我见过的计算机著作中，这是最好的一本。
——Tom Holland
这是我读过的编程语言书中最棒的一本……有关Java的书中最棒的一本。
——Ravindra Pai, Oracle 公司, SUNOS 产品线部门
我见过的最好的Java书！您做了一项了不起的工作。您的深度令人赞叹，出版的时候，我一定会购买一本。我从1996年10月就开始学习Java，其间也读过好几本这方面的书，但我觉得您这本才是“必读书”。最近几个月，我一直集中精力于一个完全用Java开发的产品。您的书帮我夯实了某些不牢固的知识点，并拓展了我的知识面。我甚至在面试签约者时引用书中的内容，作为参考的依据。通过问一些我从书中学到的知识，来判断他们对Java的理解程度（例如，数组与Vector的区别）。您的书真是伟大！
——Steve Wilkinson, 资深专家, MCI 电信公司
伟大的书。迄今为止我见过的最佳Java书籍。
——Jeff Sinclair, 软件工程师, Kestral 计算技术公司