effective java总结

1.应当用静态工厂方法代替new一个对象。

原因:工厂方法有特定的名字,方便客户端代码阅读。

          对于一些非可变对象,可以通过工厂方法复用对象,并且可以直接使用==判断对象是否相等

          可以返回原返回类型的子类型

2.私有构造函数保证单例(singleton)

使用public static final域:简单方便,性能好点

使用static方法:能添加一些逻辑

3.私有的构造函数保证类和子类不可实例化

通常用在一些工具类上

4.避免创建重复对象

入new String("hello")

一些重复的开销大的不会变的对象可以放到static块中去初始化,放到方法中会每次调用都创建一个

map的keySet方法返回的Set集合是同一个对象,只是其中的值会发生变化

只是针对重量级的对象,如线程池,小对象创建要比维护线程池高效

5.消除过期引用

主要是数组,hash等缓存中的对象。可以使用weakhashmap或者LinkedHashMap的removeEldestEntry方法消除过期对象

6.应该尽量避免终结函数finalize

终结方法不确定何时执行

终结方法中产生异常不会被抛出,导致程序使用状态错误的对象

finally中可以做一些关闭资源的操作,因为即使前面出异常,finally块中的代码也会被执行到

7.重写equals方法要注意

自反性,对称性,传递性,一致性,非空性

8.hashCode方法的作用

hashCode方法用作Set,hashMap等散列数据结构中,想散列中存一个值不可能逐个调用equals方法看要存的值是否已存在,散列内部维护一个table,将要存的值计算出hashCode后去table中看是否已存在,如果存在则比较equals是否相等,不等则重新散列存入,如果不存在直接存入。

equals相等的对象hashCode也必须相等

hashCode不等,equals也必然不想等

重写equals方法也必须重写hashCode方法




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值