首页>参考读物>计算机科学与技术>软件与程序设计

Java高效编程指南
作者 : (美)Joshua Bloch
译者 : 闻山 等
出版日期 : 2002-01-01
ISBN : 7-111-09635-5
定价 : 22.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 164
开本 : 16开
原书名 : Effective Java Programming Language Guide
原出版社: Addison-Wesley
属性分类: 店面
包含CD :
绝版 : 已绝版
图书简介

本书包含了Java编程的一些极具价值的经验原则,涵盖了大多数开发者在日常程序设计中经常遇到的问题的解决方案。书中通过对设计Java平台的专家所使用技术的全面介绍,揭示产生清晰、健壮、高效的代码需要做的和应予以避免的方方面面。每一个原则以简短独立的小品文形式出现,提供了来自这位杰出作者的丰富经验和详实的“实战故事”。贯穿全书的是通用的语言用法和设计模式,具有启发意义的技巧和技术。
  本书提供了编写高效的程序所需的最实用、最权威的指导原则。

图书前言

1996年,我打点行囊,西行来到了当时的JavaSoft,因为我清楚那里会出现奇迹。在那里的五年里,我的工作是做Java类库体系结构设计师。我设计、实现和维护了许多类库,同时也作为许多别的类库的顾问。我想,伴随Java的成熟壮大,主持这些类库的设计是一个人一生中难得的机会。毫不夸张地说,我有幸与当代许多最伟大的软件工程师一同工作着。在此期间,我学到了有关Java语言的许多东西——它能做什么,不能做什么,如何使用这种语言和类库获得最大效能。
  本书是我的一次尝试,我希望与你一起分享我的经验,使你能够避免出现相同的错误从而获得成功。我借用了Scott Meyers《Effective C++》的格式,那本书共50节,每一节给出一条如何提高程序性能和设计的具体原则。我觉得这种格式非常有效,因此我也选择了这样做。
  在许多例子里,我冒昧地使用了Java类库里的真实例子来说明我的内容。在介绍那些做得不是很完美的工作时,我尽量使用了自己的代码,但有时我也使用了其他同事的。尽管我尽力不使这种局面发生,但如果真的冒犯了某人,我在这里致以诚挚的歉意。例举反面例子是出于协作的考虑,以便读者能从我们的错误经历中得到启示。
  尽管本书不是只针对可重用组件开发者的,但不可避免地受到了过去20多年里我从事这方面工作的影响。我自然而然地按照导出API(Application Programming Interfaces,应用编程接口)的思路思考问题,并且我鼓励你也这样做。尽管你不一定要开发可重用组件,但这样构思有助于提高软件设计质量。而且,这种情形并不少见:开始做了某项有益的工作,然后在伙伴间分享,不久以后有了许多用户,这时,就不能再随心所欲地对API进行修改。如果你不经意间设计出了可重用组件,那么你会庆幸最初设计时在实现API方面所做的这种努力。
  我把重点放到API设计上的做法对那些倾心于新的轻量级软件开发方法学(lightweight Soft-ware development methodology)的读者也许不是很自然。这些方法强调设计可以工作的最简单的程序。如果你正在运用这些理念,你会发现把重点放在API设计上的做法有助于重分解(refactoring)处理。重分解的基本目标是系统结构的提高和避免代码冗余。如果系统组件没有设计良好的API,那么这些目标是不可能实现的。
  语言没有完美的,但有杰出的。我认为Java语言和它的类库非常有助于质量和效率的提高,使用它是工作上的享受。我希望这本汇聚着本人热情和希望的作品,可以使你在使用Java时更高效,更轻松!
                               Joshua Bloch
                               Cupertino,California
                                  2001年4月

图书序言

如果你以前学习过第二语言,并尝试过在课堂之外使用它,那么你会清楚有三件事是必须要掌握的:语言是如何构造的(语法)、想谈论的事物是什么(词汇)以及如何用习惯用法和高效的方式表述日常事物(用法)。其中前面两点在课堂里会学到,而对第三点,在努力使对方明白你的意思时,你经常会发现当地人对你的表述忍俊不禁。
  这对程序设计语言完全一样。你需要理解语言核心:它是算法的(algnrithmic)、函数的(func-tional)还是面向对象的(object-oriented)?你需要熟悉词汇:标准库提供了什么样的数据结构、操作和功能;同时,还要熟悉构造代码的习惯和高效用法。有关程序设计语言的教材一般都涉及前两点,而对第三点只做蜻蜒点水式的提及。这可能是由于前两点更容易编写。语法和词汇仅仅是语言自身的属性,但用法却是使用这门语言的群体的特性。
  例如,Java是使用单继承的面向对象的程序设计语言,在每一个方法内支持强制的(面向语句的.statement-oriented)编码风格。类库对图形显示、网络、分布计算和安全提供了支持。但如何在实践中最有效地使用它呢?
  还有一点,程序和口头的句子及大多数书籍杂志不同,是会随时间改变的。仅仅设计能有效工作和易于被别人理解的代码通常是不够的,还必须要把代码组织成易于修改的形式。对于某个任务T.可能会有10种代码设计方法。而这10种方法中,有7种可能是笨拙的、低效的或者是难以理解的。剩下的3种,哪一种可能会接近该任务T的下一年版本的代码呢?
  现在,有关Java语言的语法、Java语言类库和API的书籍有很多,你可以通过这些书籍来了解和学习Java语言。
  本书满足你的第三个需要:习惯和高效用法。作者Joshua Bloch在Sun Microsystems多年来从事Java语言的扩展、实现和使用工作。他还阅读了他人的大量代码。在本书中,他提出了有益的。经过系统组织的建议,这些建议有关如何构建代码使程序工作良好、使其他人易于理解,以及在今后的改动和升级时带来更少的问题——甚至关于如何使你的程序变得愉悦、优美、雅致。
                                Guy L.Steele Jr.
                             Burlington,Massachusetts
                                     2001年4月



作者简介

(美)Joshua Bloch:暂无简介

译者简介

闻山 等:暂无简介

译者序

全球信息化进程正以日新月异的节奏加速运行,特别是Internet技术的迅猛发展,使人们在感受前所未有的信息冲击的同时,相互间的交流和依赖日益增强,也使“全球一村”趋势更为明显。人们利用Internet这个全球最大的网络进行即时沟通交流,并共享网络上丰富的信息资源。
  Java编程语言具有简单、平台独立、面向对象、分布式、安全性、可移植性、多线程等特性,符Internet的发展,适应了资源共享的需求,成为分布式软件开发的主流技术。随着B2B、B2C.C2C电子商务的迅速崛起,以及分布式计算模式的广泛采用,Java将越来越流行。可以预见在“后PC时代”Java将扮演举足轻重的角色。目前,Java语言以令人惊讶的速度发展,并且Java技术日益成熟,使用Java语言的应用正在向深度和广度方向渗透。
  本书从独特的视角,通过作者数十年的Java设计经历,把Java语言设计的精要展现给读者,把众多的Java设计师的经验与读者分享。全书以小品文的形式组织,结构灵活,内容丰富,文字间跳跃着智慧的火花,书中的例子给人留下了深刻的印象。相信读者通过阅读本书,不仅在具体的编程技术而且在系统的编程思想上会有很大提高。
  本人有幸把这部优秀的著作奉献给中国的广大Java程序员,这对我也是一次挑战,感谢公司给我的这次机会,感谢朋友同事的鼓励支持!
  本书由闻山、范小萌、李林、叶小松、张洁、赵波、钟萍、邓波、窦强、陈勇、龚建波等进行翻译。前导工作室的全体同仁共同完成了本书的翻译、录排、校对等工作。尽管准确及时是我们的首要追求目标,但由于时间仓促,且译者的水平有限,在翻译过程中难免会有错误出现,请读者批评指正!
                                    2001年10月

图书目录

第1章 绪论
第2章 创建及销毁对象
2.1 考虑用静态工厂方法代替构造函数
2.2 使用私有构造函数强化singleton属性
2.3 用私有构造函数强化不可实例化能力
2.4 避免创建重复对象
2.5 消除对过期对象的引用
2.6 避免使用终结程序
第3章 对象的通用方法
3.1 重载equals时要遵守通用约定
3.2 重载equals时永远要重载hashCode
3.3 永远要重载toString
3.4 谨慎地重载clone
3.5 实现Comparable的问题
第4章 类和接口
4.1 最小化类和成员的可访问能力
4.2 倾向于非可变性
4.3  组合优于继承
4.4 设计和文档化继承
4.5 接口优于抽象类
4.6 接口只能用来定义类型
4.7 静态成员优于非静态的
第5章 C语言结构的替代
5.1 用类替代结构
5.2 用类层次代替联合
5.3 用类代替enum结构
5.4 用类和接口代替函数指针
第6章 方法
6.1 检查参数的有效性
6.2 使用保护性拷贝
6.3 认真设计方法签名
6.4 谨慎地使用过载
6.5 返回0长度的数组而不是null
6.6 为所有的导出API元素写文档注释
第7章 通用编程
7.1 最小化局部变量作用域
7.2 了解和使用库
7.3 需要确切答案时,不要使用float或double类型
7.4 尽量避免使用串
7.5 了解串并置的性能
7.6 通过接口访问对象
7.7 接口优于反射
7.8 谨慎地使用固有方法
7.9 谨慎地做优化
7.10 遵循普遍接受的命名惯例
第8章 异常
8.1 仅在不正常的情况下使用异常
8.2 对可恢复的情况使用已检查异常对程序错使用运行时异常
8.3 避免已检查异常的不必要使用
8.4 使用标准的异常用法
8.5 引发的异常要与抽象对应
8.6 给方法引发的异常做文档
8.7 在细节消息里包括失败捕获信息
8.8 使失败原子化
8.9 不要忽略异常
第9章 线程
9.1 同步访问共享的可变数据
9.2 不要过度使用同步
9.3 不要在循环外部调用wait
9.4 不要依赖线程调度器
9.5 文档化线程安全
9.6 避免使用线程组
第10章 串行化
10.1 谨慎实现Serializable
10.2 使用自定义的串行化形式
10.3 保护性地编写readObject方法
10. 4 必要时提供readResolve方法
参考文献


教学资源推荐
作者: [美]约翰·R. 莱文(John R. Levine) 著
作者: 朱鸣华 罗晓芳 董明 孟军 汪德刚 编著
作者: 陈帆 和红杰 周荣辉
作者: [美]托尼·加迪斯(Tony Gaddis)著
参考读物推荐
作者: Kevin Mukhar Chris Zelenak James L.Weaver Jim Crume
作者: 邹均 张海宁 唐屹 李磊  等著
作者: [印度] 科斯?拉曼(Kirthi Raman)著