Effective Java(一)条目整理

简介: Java之父James Gosling鼎力推荐、Jolt获奖作品全新升级,针对Java 7、8、9全面更新,Java程序员必备参考书。包含大量完整的示例代码和透彻的技术分析,通过90条经验法则,探索新的设计模式和语言习惯用法,帮助读者更加有效地使用Java编程语言及其基本类库。

PDF 下载地址: https://share.weiyun.com/CD2aC4Q1

一、创建和销毁对象(1~9)

1.用静态工厂方法代替构造方法

2.当构造方法参数过多时使用 builder 模式

3.使用私有构造方法或枚举实现 Singleton 模式

4.使用私有构造方法执行非实例化

5.优先考虑依赖注入来引用资源

6.避免创建不必要的对象

7.消除过期的对象引用

8.避免使用 finaliizer 和 cleaner 机制

9.try-with-resources 优于 try-finally

二、对于所有对象都通用的方法(10~14)

10.重写 equals 方法时请遵守通用约定

11.重写 equals 方法时也要重写 hashCode 方法

12.始终重写 toString 方法

13.谨慎地重写 clone 方法

14.考虑实现 Comparable 接口

三、类和接口(15~25)

15.使类和成员的可访问性最小化

16.在公共类中使用访问方法而不是公共属性

17.使可变性最小化

18.组合优于继承

19.要么对继承进行设计并提供文档说明,要么禁用继承

20.接口优于抽象类

21.为后代设计接口

22.接口仅用于定义类型

23.优先使用类层次而不是标签类

24.静态成员类优于非静态成员类

25.限制源文件为单个顶级类

四、泛型(26~33)

26.不要使用原生态类型

27.消除非受检警告

28.列表优于数组

29.优先考虑泛型

30.优先使用泛型方法

31.使用限定通配符来增加 API 的灵活性

32.合理地结合泛型和可变参数

33.优先考虑类型安全的异构容器

五、枚举和注解(34~41)

34.使用 enum 代替 int 常量

35.使用实例属性替代序数

36.使用 EnumSet 代替位属性

37.使用 EnumMap 代替序数索引

38.使用接口模拟可扩展的枚举

39.注解优于命名模式

40.始终使用 Override 注解

41.使用标记接口定义类型

六、Lambda 和 Stream(42~48)

42.lambda 表达式优于匿名类

43.方法引用优于 lambda 表达式

44.优先使用标准的函数式接口

45.谨慎使用 Stream

46.优先选择 Stream 中无副作用的函数

47.优先使用 Collection 而不是 Stream 来作为方法的返回类型

48.谨慎使用 Stream 并行

七、方法(49~56)

49.检查参数有效性

50.必要时进行保护性拷贝

51.谨慎设计方法签名

52.慎用重载

53.慎用可变参数

54.返回零长度的数组或集合,而不是 null

55.谨慎返回 Optional

56.为所有已公开的 API 元素编写文档注释

八、通用编程(57~68)

57.将局部变量的作用域最小化

58.for-each 循环优于传统 for 循环

59.了解和使用类库

60.若需要精确答案就应避免使用 float 和 double 类型

61.基本数据类型优于装箱类

62.当使用其他类型更合适时,则尽量避免使用字符串

63.当心字符串连接引起的性能问题

64.通过接口引用对象

65.接口优于反射机制

66.谨慎地使用本地方法

67.谨慎地进行优化

68.遵守普遍接受的命名惯例

九、异常(69~77)

69.只针对异常的情况下才使用异常

70.对可恢复的情况使用受检异常,对编程错误使用运行时异常

71.避免不必要地使用受检异常

72.优先使用标准的异常

73.抛出与抽象对应的异常

74.每个方法抛出的所有异常都需要创建文档

75.在细节消息中包含失败——捕获消息

76.尽量使失败保持原子性

77.不要忽略异常

十、并发(78~84)

78.同步访问共享的可变数据

79.避免过度同步

80.executor、task 和 stream 优先于线程

81.并发工具优先于 wait 和 notify

82.文档应包含线程安全属性

83.慎用延迟初始化

84.不要依赖于线程调度器

十一、序列化(85~90)

85.其他方法优先于 Java 序列化

86.谨慎地实现 Serializable 接口

87.考虑使用自定义的序列化形式

88.保护性的编写 readObject 方法

89.对于实例控制,枚举类优于 readResolve

90.考虑用序列化代理代替序列化实例

猜你喜欢

转载自blog.csdn.net/qq_33204709/article/details/128061275