![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
effective java
guanhang89
这个作者很懒,什么都没留下…
展开
-
5、避免创建不必要的对象
避免创建不必要的对象一般来说最好是重用对象,而不是每次需要的时候都创建一个相同的对象。反例千万不要这样做,因为穿进去的参数“aa”本身就是一个String实例String s = new String("aa");应该这样:String s = "aa";而且,它可以保证对于所有同一台虚拟机中的运行的代码,只要它们包含相同的字符串字面常量,该对象就会被重用对于提供静态工厂和构造函数的 不可变类,优先原创 2016-06-08 17:16:19 · 411 阅读 · 0 评论 -
10、始终覆盖toString
建议所有的子类都覆盖这个方法只是建议原创 2016-06-12 15:43:25 · 543 阅读 · 0 评论 -
9、覆盖equals时总是覆盖hashCode
覆盖equals时总是覆盖hashCode这是规范,原因:因为在散列集合中要保持equals和hashCode的一致性而且,equals相等hashCode必须相等,但equals是不想等的,不要求hashCode也不相等案例:public final class PhoneNumber { private final short areaCode; private final sh原创 2016-06-12 15:13:31 · 371 阅读 · 0 评论 -
8、覆盖equas时请遵守约定
覆盖equas时请遵守约定不覆盖的情况类的每个实例本质上是唯一的(Object本身的equals就能产生正确的行为)不关心逻辑是否相等基类已经覆盖了equals,并且从基类继承下来是合适的类是私有的或是包级私有的,可以确定它的equals方法永远不会调用(这是用可以在它的equals方法中抛出异常,防止调用)什么时候覆盖如果类具有自己的逻辑相等的概念的时候,并且基类还没有实现。这也叫“值类”有一种值原创 2016-06-09 13:54:33 · 528 阅读 · 0 评论 -
1、考虑用静态工厂方法代替构造器(effective java)
考虑静态构造方法这里的静态构造方法不等于设计模式中的工厂模式public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE;}优点:第一个优势是有名称对于同一个对象,它的构造函数名字是确定的,有时候你需要基于这个类的自定义对象,采用这种静态构造方法,命名的时候可以很清楚的把这个对象的特点说原创 2016-06-07 14:35:47 · 2441 阅读 · 0 评论 -
2、遇到多个构造参数的时候需要考虑使用构建器(effective java)
考虑多个构造参数什么意思,一个类的构造参数很多,但是你不是每次构造都用上所有的单数原创 2016-06-07 21:04:37 · 1111 阅读 · 0 评论 -
3、用私有构造器或者枚举类型强化SIngleton属性
结论单元素的枚举类型已经成为实现Singleton的最佳方法Singleton模式常见的Singleton有两种方式,第一种:public class Elvis { //被定义为final的,不可改变的 public static final Elvis INSTANCE = new Elvis(); private Elvis() { } public voi原创 2016-06-07 22:29:09 · 395 阅读 · 0 评论 -
4、通过私有构造器强化不可实例化的能力
不可实例化的类比如很多工具类,成员都是静态的,你写这个类的原因是想拿来直接用,而不需要实例化的但是在缺少显示构造函数的时候,编译器会给你默认生成一个构造函数,这样这个类就有可能实例化企图将类做成抽象类来强制该类不被实例化,这是行不通的(因为子类可以实例化,而且你写这个类不又不是用来继承的)将构造器设置为private来解决问题public class UtilityClass { // Su原创 2016-06-08 16:19:45 · 802 阅读 · 0 评论 -
6、消除过期的对象引用
消除过期的对象引用一个栈实践的反例本例中凡是被弹出的对象都是过期的引用public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() {原创 2016-06-08 17:44:49 · 404 阅读 · 0 评论 -
7、避免使用终结方法
避免使用终结方法终结方法通常是不可预测的,也是很危险的,一般情况下是不必要的缺点不能保证会被及时地执行终结方法中产生异常可能不会抛出(不会打印栈轨迹)性能损失常用显示终止来终止资源,配合try catch 使用例如各种流的关闭方法终结方法的合法用途充当安全网(最后的保障)终结native对象(像android 里面的native方法一样)注意子类不会调用基类的终结方法,要手动调用原创 2016-06-08 18:16:24 · 347 阅读 · 0 评论