随笔分类 - EffectiveJava
摘要:78. 同步访问共享的可变数据 为了在线程之间进行可靠的通信,也为了互斥访问,同步是必要的。 不共享可变的数据。要么共享不可变的数据,要么压根不共享。换句话说,将可变数据限制在单线程中。 当多个线程共享可变数据的时候,每个读或写数据的线程必须执行同步。如果没有同步就无法保证一个线程所做的修改被另一个
阅读全文
摘要:67. 明智审慎地进行优化 有三条优化的格言是每个人都应该知道的: (1)比起其他任何单一的原因(包括盲目的愚钝),很多计算上的过失都被归咎于效率(不一定能实现) (2)不要去计算效率上的一些小小的得失,在97%的情况下,不成熟的优化才是一切问题的根源。 (3)在优化方面,我们要遵守两条规则: 规则
阅读全文
摘要:56. 为所有已公开的API元素编写文档注释 要正确地记录API,必须在每个导出的类、接口、构造方法、方法和属性声明之前加上文档注释。如果一个类是可序列化的,还需要记录它的序列化形式。 文档注释在源代码和生成的代码中都应该是可读的通用原则。 类或接口中的两个成员方法或构造方法不应具有相同的概要描述。
阅读全文
摘要:45. 明智谨慎地使用Stream 46. 优先考虑流中无副作用的函数 47. 优先使用Collection而不是Stream作为方法的返回类型 48. 谨慎使用流并行 49. 检查参数有效性 大多数方法和构造方法对可以将哪些值传到其对应参数有一些限制。例如:索引必须是非负数、对象引用必须是非nul
阅读全文
摘要:34. 使用枚举类型替代整型常量 常量的语义表达不清晰,只能靠前面的名称来区分。枚举具有可读性、更安全、更强大等优势。而且枚举类型对象之间的值比较可以使用==来比较值是否相等的,不是必须使用equals方法。 要将数据与枚举常量相关联,首先需要声明实例属性并编写一个构造方法,构造方法带有数据并将数据
阅读全文
摘要:23. 类结构层次优于标签类 有时你会碰到一个类,它的实例有一个或多个风格,并且包含一个tag属性表示实例的风格。例如,如下面的类表示一个圆或者矩形: 这样的类有很多缺点,代码可读性查,将来增加一个三角形又得重写计算面积的方式,而且需要增加三角形属性。 解决办法,用类层次结构代替: 24. 支持使用
阅读全文
摘要:12. 始终重写toString()方法 如果不重写toString()方法,打印的时候是 类名+@+哈希码的无符号十六进制。我们查看 Object的toString()方法如下: 阿里规约也有一条: POJO类必须重写toString方法。如果继承了另一个类,在前面加super.toString(
阅读全文
摘要:1. 考虑使用静态工厂方法替代构造方法 一个类可以提供一个公共静态工厂方法,它只是返回类实例的静态方法。例如JDK的Boolean的valueOf方法: 静态工厂方法与设计模式中的工厂方法模式不同。 优点: (1)静态工厂方法不像构造方法,它们有名字,语义清晰 (2)静态工厂方法不需要每次调用时都创
阅读全文