金莎娱乐电子游戏网《Effective Java 第三版》目录汇总

  • 金莎娱乐电子游戏网,简轻便单易学;
  • 轻易使用,纵然未有文书档案;
  • 很难误用;
  • 轻松阅读,代码易于维护;
  • 足足苍劲,能够满意急需;
  • 轻松增添;
  • 顺应顾客。

            Java(普通话第二版卡塔尔(قطر‎》【PDF】”  TITLE=”《Effective
Java(汉语第二版卡塔尔》【PDF】” />

  在Java编制程序中78条极具实用价值的阅世准绳,那个涉世法则包含了多数开辟人士天天所直面的主题材料的消除方案。通过对Java平台设计大方所采纳的技能的兼备描述,拆穿了应有做什么样,不该做什么样技术发生清晰、强壮和快捷的代码。第2版反映了Java
5中第生机勃勃的改造,并删除了老式的内容。
  《Effective
Java中文版(第2版)》中的每条准则都以轻便、独立的小作品方式现身,并透过示范代码加以进一步验证。
  《Effective Java汉语版(第2版)》的内容蕴涵:
  崭新的泛型、枚举、申明、自动装箱、fof-each循环、可变参数、并发机制,等等。
  优秀宗旨的全新技能和履行,包罗对象.类、类库、方法和种类化。
  如何制止Java编制程序语言中常被误解的轻微之处:陷阱和弱点。

先是章简要介绍

忽略

总结

API设计是风流倜傥件极高级大气上档期的顺序的工艺,对技术员、终端顾客和商店都会具有升高。不要盲目地去据守文中所谈起的平整、说明等,但也实际不是去侵略他们,API设计不是件轻易的工艺,亦非生机勃勃种能够孤立行动的活。当然完美恒久无法落到实处,但大家要恪尽去追求康健。

    小编简单介绍

第3章 对于具备指标都通用的艺术
第8条:覆盖equals时请信守通用约定
第9条:覆盖equals时总要覆盖hashCode
第10条:始终要遮掩toString
第11条:严谨地覆盖clone
第12条:寻思完成Comparable接口

第十章 异常

  1. 仅在发出特别的标准下使用特别70.
    对可还原条件使用已检查万分,对编制程序错误选择运营时格外71.
    制止不供给地利用检查卓殊72. 赞成接纳标准十三分73. 抛出契合于肤浅的极度74.
    文书档案化每一种方法抛出的享有特别75. 在详细音讯中隐含退步捕获新闻76.
    争取维持战败原子性77. 永比超小体非常

API设计流程中的注意事项

采撷须求

在开端早先,你恐怕会收取部分缓慢解决方案,它们不必然会比现存的方案好,而你的天职是以用例的款式提取真实需要,并创建真正相符的缓慢解决方案,那样营造出来的东西就能够进一层有价值。

从轻松的证实最早

此刻,编写简短的表达最为适宜,编写时索要思考的成分有:

  • 世故要远胜于完整性;
  • 跳出家有家规:听取意见并严阵以待;
  • 轻易短小才易改进;
  • 赢得信赖之后将其具体化,在这里在那之中,编制程序很关键。

飞快编写API

  • 对每贰个完结实行封存,避防错过;
  • 在开头此前,列出部分客观的明确,保存所写表明,以免错失;
  • 世袭编写和扩充API。

编写制定SPI至关心珍惜大

  • Service Provider
    Interface即服务提供商接口,插件服务支撑多样兑现,举例Java
    Cryptography Extension
    (JCE);
  • 发布早前编写四个插件;
  • “叁遍口径”(“The Rule of
    Threes”):指的是当有些意义第一次面世时,才开展”抽象化”。

保卫安全切实可行的期望

  • 大部API设计都过度约束;
  • 对或然会犯的失实进行预后,要用发展的考虑来编排API。

小编很期待10年前就有着这本书。也许有人以为本身无需别的Java方面包车型大巴图书,但是小编急需那本书。
——Java之父
James Gosling

第4章 类和接口
第13条:使类和成员的可访谈性最小化
第14条:在公有类中应用访谈方法而非公有域
第15条:使可变性最小化
第16条:复合优先于继续
第17条:要么为接二连三而设计,并提供文书档案表明,要么就不许继续
第18条:接口优于抽象类
第19条:接口只用于定义类型
第20条:类档案的次序优于标签类
第21条:用函数对象表示战术
第22条:优先思虑静态成员类

第六章 枚举和注释

  1. 运用枚举类型取代整型常量35. 采取实例属性取代序数36.
    接收EnumSet代替位属性37. 施用EnumMap替代序数索引38.
    运用接口模拟可扩充的枚举39. 表明优于命超方式40. 平素使用Override申明41.
    行使标识接口定义类型

重构API设计

在Vector中进行Sublist操作

public class Vector {
 public int indexOf(Object elem, int index);
 public int lastIndexOf(Object elem, int index);
 ...
}

分析:

  • 在索求上不刚劲
  • 尚无文书档案很难使用

重构Sublist操作

public interface List {
 List subList(int fromIndex, int toIndex);
 ...
}

分析:

  • 特别有力——扶助具有操作
  • 选用接口来压缩概念权重:较高的重力重量(power-to-weight)比
  • 从未有过文书档案也便于使用

线程局地变量

 // Broken - inappropriate use of String as capability.
 // Keys constitute a shared global namespace.
 public class ThreadLocal {
 private ThreadLocal() { } // Non-instantiable
 // Sets current thread’s value for named variable.
 public static void set(String key, Object value);
 // Returns current thread’s value for named variable.
 public static Object get(String key);
 }

线程局地变量重构1

 public class ThreadLocal {
 private ThreadLocal() { } // Noninstantiable
 public static class Key { Key() { } }
 // Generates a unique, unforgeable key
 public static Key getKey() { return new Key(); }
 public static void set(Key key, Object value);
 public static Object get(Key key);
 }

能够运转,但是急需运用模板代码。

static ThreadLocal.Key serialNumberKey = ThreadLocal.getKey();
 ThreadLocal.set(serialNumberKey, nextSerialNumber());
 System.out.println(ThreadLocal.get(serialNumberKey));

线程局部变量重构2

public class ThreadLocal {
 public ThreadLocal() { }
 public void set(Object value);
 public Object get();
 }

从API和顾客端代码中删去了无用代码。

static ThreadLocal serialNumber = new ThreadLocal();
 serialNumber.set(nextSerialNumber());
 System.out.println(serialNumber.get());

小编:(美利坚联邦合众国)Joshua Bloch 译者:杨女郎花俞黎敏
Joshua
Bloch,是Google集团的首席Java布局师。是Jolt大奖的获得者。他曾是Sun集团的典型技术员,和Transarc集团的高档次和品级系统设计员。Bloch曾辅导团队安插和达成过无数的Java平台特色,包蕴JDK
5.0语言巩固版和获获得金奖项的Java Collections
Framework。他的著述还包涵:《Java
Puzzlers》、《Java
Concurrency in Practive》等。

到Linux公社1号FTP服务器下载

其次章 创制和销毁对象

  1. 假造动用静态工厂方法替代构造方法2.
    当构造方法参数过多时使用builder方式3.
    使用个人结构方法或枚类实现Singleton属性4. 使用个人布局方法奉行非实例化5.
    使用正视注入替代硬连接能源6. 防止创设不供给的对象7. 消弭过期的目的引用8.
    幸免选用Finalizer和Cleaner机制9.
    用到try-with-resources语句替代try-finally语句

乘势大数量、公共平台等互连网本领的逐级成熟,API接口的第风流倜傥逐步呈现,从公司的角度来看,API能够算作是信用合作社单笔庞大的基金,公共API能够捕获客户、为厂商做出过多进献。对于私有来讲,只要你编制程序,你正是两个API设计者,因为好的代码便是模块——每个模块正是二个API,而好的模块会被反复行使。此外,编写API还低价开荒者提升代码品质,提升自己的编码水平。

译者序

前言
致谢
第1章引言
第2章创设和销毁对象
第1条:思考用静态工厂方法替代结构器
第2条:蒙受几个构造器参数时要思量用创设器
第3条:用个人结构器或然枚举类型加强Singleton属性
第4条:通过个人布局器深化不可实例化的力量
第5条:防止创制不要求的对象
第6条:解除过期的对象援用
第7条:防止选择达成方法
第3章对于有所指标都通用的主意
第8条:覆盖equals时请据守通用约定
第9条:覆盖equals时总要覆盖hashCode
第10条:始终要隐蔽toString
第11条:稳重地覆盖clone
第12条:思忖完毕Comparable接口
第4章类和接口
第13条:使类和分子的可访谈性最小化
第14条:在公有类中接受访谈方法而非公有域
第15条:使可变性最小化
第16条:复合优先于继续
第17条:要么为接二连三而规划,并提供文档表明,要么就禁止继续
第18条:接口优于抽象类
第19条:接口只用于定义类型
第20条:类档案的次序优于标签类
第21条:用函数对象表示战术
第22条:优先思考静态成员类
第5章泛型
第23条:请不要在新代码中接收原生态项目
第24条:废除非受检警报
第25条:列表优先于数组
第26条:优先思量泛型
第27条:优先考虑泛型方法
第28条:利用有限定通配符来进步API的灵活性
第29条:优先思忖类型安全的异构容器
第6章枚举和注释
第30条:用enum代替int常量
第31条:用实例域替代序数
第32条:用EnumSet替代位域
第33条:用EnumMap取代序数索引
第34条:用接口模拟可伸缩的枚举
第35条:表明优先于命超级模特式
第36条:坚持不渝采取Override注明
第37条:用标志接口定义类型
第7章方法
第38条:检查参数的有效性
第39条:必要时开展爱惜性拷贝
第40条:严慎设计艺术具名
第41条:慎用重载
第42条:慎用可变参数
第43条:再次来到零长度的数组或许聚众,实际不是:null
第44条:为保有导出的API成分编写文书档案注释
第8章通用程序设计
第45条:将风姿罗曼蒂克部分变量的功效域最小化
第46条:for-each循环优先于守旧的for循环
第47条:通晓和平运动用类库
第48条:即使须求规范的答案,请制止使用float和double
第49条:基本类型优先于装箱基本项目
第50条:固然其它品类更切合,则尽量制止使用字符串
第51条:小心字符串连接的性质
第52条:通过接口援用对象
第53条:接口优先于反射机制
第54条:严谨地使用当地点法
第55条:谨严地打开优化
第56条:信守普遍选用的命名惯例
第9章异常
第57条:只针对极度的景况才使用特别
第58条:对可复原的事态接纳受检异常,对编制程序错误使用运维时十二分
第59条:幸免没有必要地使用受检的老大
第60条:优用标准的不行
第61条:抛出与虚无相呼应的特别
第62条:每一种方法抛出的拾壹分都要有文书档案
第63条:在细节音讯中包涵能捕获失败的新闻
第64条:努力使退步保持原子性
第65条:不要忽视万分
第10章并发
第66条:同步访谈分享的可变数据
第67条:幸免过度同步
第68条:executor和task优先干线程
第69条:并发工具优先于wait和notify
第70条:线程安全性的文书档案化
第71条:慎用延迟初始化
第72条:不要依赖于线程调节器
第73条:幸免使用线程组
第11章种类化
第74条:谨严地达成Serializable接口
第75条:思虑动用自定义的系列化方式
第76条:爱护性地编写readObject方法
第77条:对于实例调整,枚举类型优先于readResolve
第78条:考虑用连串化代理取代体系化实例
附录
第1版与第2版条款对照
中爱沙尼亚语术语相比较
参考文献                          
《Effective Java(粤语第二版卡塔尔国》【PDF】下载链接:

——————————————分割线——————————————

其三章 全部目的的通用方法

  1. 重写equals方法时坚决守护通用约定11.
    重写equals方法时同有时间也要重写hashcode方法12. 向来重写 toString 方法13.
    行事极为审慎地重写 clone 方法14.虚构完成Comparable接口

API中的方法设计

模块能不负职分的,客商端就无须做压缩模板代码的选拔:

import org.w3c.dom.*;
 import java.io.*;
 import javax.xml.transform.*;
 import javax.xml.transform.dom.*;
 import javax.xml.transform.stream.*;
 // DOM code to write an XML document to a specified output stream.
 private static final void writeDoc(Document doc, OutputStream out)throws IOException{
 try {
 Transformer t = TransformerFactory.newInstance().newTransformer();
 t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doc.getDoctype().getSystemId());
 t.transform(new DOMSource(doc), new StreamResult(out));
 } catch(TransformerException e) {
 throw new AssertionError(e); // Can’t happen!
 }
 }

依照最小咋舌原则

顾客API只需依照必要来规划就能够,不必让顾客认为惊叹,小心适得其反:

public class Thread implements Runnable {
 // Tests whether current thread has been interrupted.
 // Clears the interrupted status of current thread.
 public static boolean interrupted();
 }

故障火速报告应赶紧扭转

  • 编写翻译时最佳是静态类型、泛型;
  • 措施里应该包罗错误自动提交机制。

// A Properties instance maps strings to strings
 public class Properties extends Hashtable {
 public Object put(Object key, Object value);
 // Throws ClassCastException if this properties
 // contains any keys or values that are not strings
 public void save(OutputStream out, String comments);
 }

以String方式对具有可用数据提供编制程序式访谈

public class Throwable {
 public void printStackTrace(PrintStream s);
 public StackTraceElement[] getStackTrace(); // Since 1.4
}
public final class StackTraceElement {
 public String getFileName();
 public int getLineNumber();
 public String getClassName();
 public String getMethodName();
 public boolean isNativeMethod();
}

措施重载要致密

  • 制止三翻四复的重载,例如多个重载适用于同一个钱物
  • 就算你能分清,也最佳不用这么做,最棒起个例外的名字
  • 假诺非要定义这种重载,相像的参数确定保障同等的表现

public TreeSet(Collection c); // Ignores order
public TreeSet(SortedSet s); // Respects order

应用方便的参数和重临类型

  • 通过类来援救接口类型输入
  • 尽大概地接受最特定的输入参数类型
  • 比方已经有贰个更加好的档案的次序存在,就毫无使用string类型
  • 并非用浮点型来修饰货币值
  • 接受Double(六17个人卡塔尔国而毫不接收Float(叁十一人State of Qatar
  • 在章程上参数顺序要黄金时代律,尤其是参数类型相同一时间,则更加的重大

#include 
 char *strcpy (char *dest, char *src);
 void bcopy (void *src, void *dst, int n);

java.util.Collections – first parameter always collection to be
modified

or queried

java.util.concurrent – time always specified as long delay, TimeUnit

unit

制止选拔长参数列表

  • 三个或八个以内的参数是最康健的
  • 长参数列表是加害的,程序员轻易失误,何况程序在编译、运维时会表现倒霉
  • 减弱参数的二种方法:Break up method、成立参数助手类

最佳防止这种景观现身:

// Eleven parameters including four consecutive ints
HWND CreateWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName,
 DWORD dwStyle, int x, int y, int nWidth, int nHeight,
 HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);

重返值勿需进行特别管理

例如说,重返零长度字符串也许空会集

package java.awt.image;
 public interface BufferedImageOp {
 // Returns the rendering hints for this operation,
 // or null if no hints have been set.
 public RenderingHints getRenderingHints();
 }

越来越多书单和推举E-BOOK请关心:

作者简单介绍

第十生龙活虎章 并发

  1. 一块访谈分享的可变数据79. 防止超负荷同步80. EXECUTO奥迪Q5S, TASKS, STREAMS
    优于线程81. 优先利用并发实用程序代替wait和notify82. 线程安全文书档案化83.
    精明稳重地使用延缓起初化84. 不要依靠线程调整器

乘胜前段时间软件规模的日益庞大,API编制程序接口的设计变的更是首要。杰出的接口设计能够减低系统各部分之间的互相正视,进步组成单元的内聚性,裁减组成单元间的耦合度,进而抓好系统的维护性和平静。

《Sun 集团主旨技能丛书:Effective
Java汉语版(第2版卡塔尔》内容周全,构造清晰,讲授详细。可看做本领职员的参阅用书。编码平添野趣,程序特别完美,高效成为习于旧贯,工作这么轻便。你是不是正在寻觅一本能够越来越深远地明白Java编制程序语言的书,以便编写出更清楚、更不易、更完善且更易于重用的代码。不用找了!《Sun
集团主旨技巧丛书:Effective
Java普通话版(第2版State of Qatar》为我们带给了共78条程序员必备的经验法规,针对你天天都会赶上的编制程序难点建议了最得力、最实用的减轻方案。
那本杰出Jolt获获奖项文章实属名副其实。小编对新版实行了绝望的换代。满含了自第l版之后所引进的Java
E5和Java SE
6的性状,同期支付了新的设计格局和语言习贯用法,介绍了怎么丰富利用从泛型到枚举、从评释到活动装箱的各样特色。
每生龙活虎章都富含多少个“条款”,以简洁明了的款式表现,自成单身的短文,它们提议了切实可行的建议,对于Java平台精妙之处的独到见解,以至特出的代码范例。各类条指标汇总描述和分解都在说明了应该咋做,不该怎么做,以至为什么。

第9章 异常
第57条:只针对相当的事态才使用特别
第58条:对可还原的情形采取受检分外,对编制程序错误使用运维时那么些
第59条:防止不供给地利用受检的可怜
第60条:优先利用专门的学问的极度
第61条:抛出与指雁为羹相对应的异常
第62条:每种方法抛出的充足都要有文书档案
第63条:在细节新闻中包罗能捕获退步的音信
第64条:努力使战败保持原子性
第65条:不要忽略相当

第楚辞 通用编程

  1. 最小化局地变量的作用域58. for-each循环优于古板for循环59.
    熟练并接收Java类库60. 亟待规范的结果时制止选拔float和double类型61.
    基本项目优于装箱的主干类型62. 当有别的更适用的门类时就不用字符串63.
    注意字符串连接的习性64. 通过对象的接口引用对象65. 接口优于反射66.
    明智审慎地应用当地点法67. 睿智谨严地打开优化68. 坚决守护分布选择的命名约定

API中类的安排

最小化可变性

  • 不过不用随意校正类,除非有三个百般合情的说辞;
  • 固然是可变类,最棒保持一点都不大的情事空间、定义卓绝的构造,相机行事地去调用方法。

子类只存在有含义的地点

  • 子类具有可代替性(Liskov);
  • 集体类不应该继续其余公共类。

用于后续的思谋和文书档案或许直接禁绝继续(Design and Document for
Inheritance or Else Prohibit it)

  • 继续破坏封装
  • 借让你允许子类和文档自用,那么要考虑彼此该怎样互相调用方法
  • 萧规曹随战略:把富有类都设置成Final

    媒体引用

用户名:ftp1.linuxidc.com

通过屡屡不断的拖延和坚持不渝,全部规规矩矩已经翻译完毕,供大家分享学习。时间有限,个别地点翻译得比较仓促,希望有存疑的地点建议商量改良。

相关文章