• 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.考虑用序列化代理代替序列化实例

  • 相关阅读:
    五问补盲(一) | 激光雷达补盲,视场多大算大?
    QT 支持window 和 mac下应用程序崩溃检测
    阿里春招JAVA后端面试总结
    Spring-MVC
    景联文科技:提供通用多模态数据,助力AI多模态领域实现飞跃式发展
    C#WebAPI项目发布和IIS部署
    LeetCode 389. Find the Difference
    「笔翰如流」上线,TFS-CLUB 社区活动来袭 〖 你更文、我送礼 〗限量绝版谷歌周边等你拿
    如何成为一名高级数字 IC 设计工程师(1-2)Verilog 编码语法篇:Verilog 1995、2001、2005 标准
    CogView中的单层TransformerLayer
  • 原文地址:https://blog.csdn.net/qq_33204709/article/details/128061275