您的位置:首页 > Web前端

Effective Java 第二版和第一版的条目的增删

2011-12-24 14:05 369 查看
Effective Java第二版和第一版的年份有很大差距,作者Joshua Bloch第一版作序时是2001年,第二版是2008年,期间Java发展很快,jdk从1.4发展到jdk6.0(Java发行版本从Java 5.0开始改为j2se5.0),Java中又增加了泛型、枚举类型、注解、自动装箱和for-each循环等新元素,作者在原来基础上把原书57个条目发展到了78个,本人比对了两版的条目,下面是各个章节的增加条目:

第2章 创建和销毁对象(Creating and Destroying Objects )

1.增加了第2条:遇到多个构造器参数时要考虑用构建器(Consider a builder when faced with many constructor parameters).

第3章 对于所有对象都通用的方法(Methods Common to All Objects)

注:第三章两版的条目没有变化。

第4章 类和接口(Classes and Interfaces)

1.增加了第14条:在公共类中使用访问方法而非公有域(In public classes,use accessor methods,not public fields);

2.增加了第20条:类层次优于标签类(Prefer class hierarchies to tagged classes);

3.增加了第21条:用函数对象表示策略(Use function objects to represent strategies).

注:原第一版第5章是C语言结构的代替(Substitutes for C Constructs)

从第二版附录中“第一版与第二版条目对照”中关于本章的对照有:

第1版条目-------------------------------------第2版条目

第19条:用类代替结构 ----------------------第14条:在公有类中使用访问方法而非公有域

第20条:用类层次代替联合 ----------------第20条:类层次优于标签类

第21条:用类代替enum结构 --------------第30条:用enum 代替int常量

第22条:用类和接口来代替函数指针-----第21条:用函数对象表示策略

对于这条目的对照因为还没有看到这个地方,也不好下结论,但从条目标题依然会让人有点疑惑

下面是上面几条的英文对照:

First Edition ---------------------------------------------------Second Edition

Item 19:Replace structures with classes ------------Item 14:In public classes,use accessor                  
    

methods,not public fields

Item 20:Replace unions with class hierarchies ----Item 20:Prefer class hierarchies to tagged classes

Item 21:Replace enum constructs with classes ----Item 30:Use enums instead of int constants

Item 22:Replace function pointers with classes ----Item 21:Use function objects to represent strategies

and interfaces

第1版的第19条与第2版的14条无论从原文还是翻译的比对感觉不出有什么相似之处,我看了其他章节的条目如果不需要更改的条目其题目也不会改变,不然只有把整本书看完才能知道条目之间的差异,当然阅读内容是很重要的,但是之前能了解版本更新后的显著差异,并从中得出jdk升级所带来的新的元素,我感觉能从条目中的标题体现出来是很好的。So,我是根据条目标题比对得出增加或更换。

第5章 泛型(Generics)

注:第2版第5章是新增的章节,因为之前第一版的时候还没有泛型,所以整章都是新增的条目

1.第23条:请不要在新代码中使用原生态类型(Don't use raw types in new code)

2.第24条:消除非受检警告(Eliminate unchecked warnings)

3.第25条:列表优先于数组(Prefer lists to arrays)

4.第26条:优先考虑泛型(Favor generic types)

5.第27条:优先考虑泛型方法(Favor generic methods)

6.第28条:利用有限制通配符来提升API的灵活性(Use bounded wildcards to increase API flexibility)

7.第29条:优先考虑类型安全的异构容器(Consider typesafe heterogeneous containers)

第6章 枚举和注解(Enums and Annotations)

注:枚举和注解也是jdk5.0后的概念,所以本章也是全新的条目:

1.第30条:用enum代替int常量(Use enums instead of int constants)

2.第31条:用实例域代替序数(Use instance fields ins
4000
tead of ordinals)

3.第32条:用EnumSet代替位域(Use EnumSet instead of bit fields)

4.第33条:用EnumMap代替序数索引(Use EnumMap  instead of ordinal indexing)

5.第34条:用接口模拟可伸缩的枚举(Emulate extensible enums with interfaces)

6.第35条:注解优于命名模式(Prefer annotations to naming patterns)

7.第36条:坚持使用Override注解(Consistently use the Override annotation)

8.第37条:用标记接口定义类型(Use marker interfaces to define types)

第7章 方法(Methods)

1.增加了第42条:慎用可变参数(Use varargs judiciously)

第8章 通用程序设计(General Programming)

1.增加了第46条:for-each循环优先于传统的for循环(Prefer for-each loops to traditional for loops)

2.增加了第49条:基本类型优先于装箱基本类型(Prefer primitive types to boxed primitives)

第10章 并发(Concurrency)

注:第一版和第二版在本章节安排上有一点更改,下面列出两版的条目:

第一版:

第50条:永远不要在循环的外面调用wait(Never invoke wait outsides a loop)

第52条:线程安全性的文档化(Document thread safety)

第二版:

第68条:executor和task优先于线程(Prefer executors and tasks to threads)

第69条:并发工具优先于wait和notify(Prefer concurrency utilities to wait and notify)

第71条:慎用延迟初始化(Use lazy initialization judiciously)

第11章 序列化(Serialization)

1.增加了第78条:考虑用序列化代理代替序列化实例(Consider serialization proxies instead of serialized instances)

个人感受:Efftive Java是Java 的经典书籍之一,我感觉经典的书就需要多读沉读,这种书一般就会随着jdk的更新而从写,各个版本都拿来读一下是很好的,你能感受的其中Java的一步步成长,以及其中的丢弃和发展,本书作者Joshua Bloch是Google 的首席Java架构师,曾经是Sun公司的杰出工程师,和Transarc公司的高级系统设计师,JDK5.0语言的增强版(虽然我也不知到这是什么意思)和获奖的Java Collection Framework都是他的功劳,这么在Java领域做出卓越成就的人,现在坐下来写出自己多年来的知识和经验,

然后传送给我们每个渴求进步的学子,这是很宝贵的财富,真是需要好好利用,搜获里面关于大师各个学习积累。大师写的还有一本书是《Java 解惑》(Java Puzzlers)我刚从图书馆借到,打算不还了,嘿嘿,反正放在图书馆太可惜了。去书山淘金了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息