08-通用编程(57-68)
57.将局部变量的作用域最小化
要使局部变量的作用域最小化,最有力的方法就是在第一次要使用它的地方进行声明。
几乎每一个局部变量的声明都应该包含一个初始化表达式。
最后一种“将局部变量的作用域最小化”的方法是使方法小而集中。
58. for-each 循环优先于传统的 for 循环
推荐增强 for 循环,或者 迭代器:
59. 使用类库
从Java 7开始,就不应该再使用Random了。现在选择随机数生成器时,大多使用ThreadLocalRandom
。它会产生更高质量的随机数,并且速度非常快。在我的机器上,比Random快了3.6 倍。对于Fork Join Pool和并行Stream,则使用SplittableRandom。
每个程序员都应该熟悉java.lang. java.util. java.io 及其子包中的内容。
其他类库,按需学习查看即可。
60. 如果需要精确的答案,请避免使用 float 和 double
float 和 double 尤其不适合货币计算。
解决该问题的正确方法为:使用 BigDecimal、int、long 进行货币计算。
61. 基本类型优先于装箱基本类型
- 基本类型性能更优
- 包装类型在比较时,注意 == 操作的判断。
62. 如果其他类型更合适,则尽量避免使用字符串
字符串不适合代替值类型、枚举类型、聚合类型、能力表。
63. 字符串连接的性能
为连接 n 个字符串而重复地使用字符串连接操作符,需要 n 的平方级的时间。
为了性能,使用 StringBuilder 代替 String。
64. 通过接口引用对象
如果没有适合的接口,就用类层次结构中提供了必要功能的最小的具体类来引用对象吧。
65. 接口优先于反射机制
反射损失了编译时类型检查的优势、执行反射访问锁需要的代码非常笨拙和冗长、性能损失。
66. 谨慎的使用本地方法
本地方法提高性能不值得提倡。
67. 谨慎的进行优化
要努力编写好的程序,而不是快的程序。
要努力避免那些限制性能的设计决策。
要考虑 API 设计决定的性能后果。
优化前后对性能进行测量、记录。
68. 遵守普遍接受的命名惯例
08-通用编程(57-68)
https://janycode.github.io/2020/09/16/02_编程语言/01_Java/04_EffectiveJava/08-通用编程(57-68)/