通过私有化构造函数强化不可实例化的类
这个个人理解就是因为有默认构造函数的原因,如果是显示声明私有化的话则不可实例化,或者只能通过本身来提供实例。但是对于某些工具类,如Collections,更希望即便在内部也不要私有化,书中给出一种方案,我们一Collections类为例
1 | // Suppresses default constructor, ensuring non-instantiability. |
避免创建不必要的对象
其实鼓励能够使用单例的或者静态工厂的尽量使用,这样可以少创建无用对象,这样能减轻垃圾回收的压力,可以很好的提升性能。
1 | String s = new String("stringette"); |
可以参考下这篇文章:https://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html
优先使用基本类型,而非装箱类型,这里装箱的时候回产生新的对象。
下面这个例子测试时间分别为8483ms和775ms相差有10倍之多1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27package com.stardust.effective.role4And5;
/**
* Created by mike on 2017/12/4.
*/
public class LongTest {
public static void main(String[] args) {
long start = System.currentTimeMillis(); //获取开始时间
Long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
long middle = System.currentTimeMillis(); //获取中间时间
System.out.println(middle-start);
long sum2 = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum2 += i;
}
long end = System.currentTimeMillis(); //获取结束时间
System.out.println(end-middle);
}
}