08-通用编程(57-68)

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

要使局部变量的作用域最小化,最有力的方法就是在第一次要使用它的地方进行声明。

几乎每一个局部变量的声明都应该包含一个初始化表达式。

最后一种“将局部变量的作用域最小化”的方法是使方法小而集中。

image-20210217182709440

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

推荐增强 for 循环,或者 迭代器:

image-20210217182843592

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. 基本类型优先于装箱基本类型

  1. 基本类型性能更优
  2. 包装类型在比较时,注意 == 操作的判断。

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

字符串不适合代替值类型、枚举类型、聚合类型、能力表。

63. 字符串连接的性能

为连接 n 个字符串而重复地使用字符串连接操作符,需要 n 的平方级的时间。

为了性能,使用 StringBuilder 代替 String。

64. 通过接口引用对象

如果没有适合的接口,就用类层次结构中提供了必要功能的最小的具体类来引用对象吧。

65. 接口优先于反射机制

反射损失了编译时类型检查的优势、执行反射访问锁需要的代码非常笨拙和冗长、性能损失。

66. 谨慎的使用本地方法

本地方法提高性能不值得提倡。

67. 谨慎的进行优化

image-20210217184008117

要努力编写好的程序,而不是快的程序。

要努力避免那些限制性能的设计决策。

要考虑 API 设计决定的性能后果。

优化前后对性能进行测量、记录。

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

image-20210217184153653


08-通用编程(57-68)
https://janycode.github.io/2020/09/16/02_编程语言/01_Java/04_EffectiveJava/08-通用编程(57-68)/
作者
Jerry(姜源)
发布于
2020年9月16日
许可协议