
Effective Java
学习Effective Java心得
tiepiche
这个作者很懒,什么都没留下…
展开
-
第46条 for-each循环优先于传统的for循环
迭代器循环的缺点如下面代码及输出结果所示,本来期望输出的是Face枚举值的笛卡尔积、36种结果,实际上输出只有6种结果。原因就是i和j本质上都是同一个引用对象,所以遍历过程中、两者是同时变化的。enum Face {ONE, TWO, THREE, FOUR, FIVE, SIX}Collection<Face> faces = Arrays.asList(Face.values...原创 2020-04-19 12:43:26 · 259 阅读 · 0 评论 -
第11条 谨慎地覆盖clone
是否要实现Cloneable所有实现了Cloneable接口的类都应该用一个公有方法覆盖clone,此公有方法首先调用super.clone,然后修正任何需要修正的域。如果你继承了一个实现Cloneable接口的类,那么你也必须实现一个行为良好的clone方法、这同样适用于所有直接或间接实现Cloneable的类。但是,实际上这是很难保证的,因此实际上对于clone方法的使用效果也很难保证。因...原创 2020-04-16 08:40:53 · 214 阅读 · 1 评论 -
Java受检异常和非受检异常
异常分类Java中所有异常都是java.lang.Throwable的子类,通常分为三类:Error: 表示不可处理的错误,通常是程序引起的不可恢复的错误,比如资源不足等。处理方式: 不处理。RuntimeException: 运行时异常,通常是通常分为两种: 受检异常(checked exception)和非受检异常(unchecked exception)。常见受检异常常见...原创 2020-04-14 09:40:50 · 2422 阅读 · 0 评论 -
第9条 覆盖equals总要覆盖hashCode
equals与hashCode的关系hashCode的通用约定hashCode方法应该是什么样总结原创 2020-03-01 17:45:38 · 157 阅读 · 0 评论 -
第8条 覆盖equals时请遵守通用约定
1. 什么是equals方法equals是Object类中一个非final的方法,是设计成要被覆盖的。 public boolean equals(Object obj) { return (this == obj); }上述代码可以看出,Object的equals方法比较的是对象的内存地址,从这个角度来讲,类的每个对象本质上都是唯一的、因为每个对象的内存地址是不一...原创 2020-03-01 15:13:43 · 198 阅读 · 0 评论 -
第3条 单例模式实现方案
阅读Effective Java第3条"用私有构造器或者枚举类型强化Singleton属性",进而拓展单例模式的实现方案,下文将逐个展开阐述。1. 单例模式的定义单例(Singleton)就是一个类必须保证有且仅有一个实例存在。比如,spring通过xml或@Component等注解配置的bean都是单例的2. 单例模式的好处1)只有一个对象,内存开支少、性能好2)避免对资源的多重占...原创 2020-02-23 15:19:43 · 267 阅读 · 0 评论 -
第2条 遇到多个构造器参数时要考虑用构建器
1. 构建器适合的使用场景当一个类成员变量很多,那么生成该类的对象就会需要传入很多参数,无论是通过构造函数生成还是静态工厂方法,这种场景就比较适合使用构建器--Builder模式。public class A { private int a; private int b; private int c; // 传统的构造函数 public A(int a){} ...原创 2020-02-19 09:49:59 · 172 阅读 · 0 评论 -
第1条 考虑用静态工厂方法代替构造器
1. 什么是静态工厂方法对于类而言,为了让客户端获取它自身的一个实例,最常用的方法就是提供一个公有的构造方法。但其实还有一种方法–类提供一个公有静态工厂方法(static factory method),它只是一个返回类的实例的静态方法。如下代码所示,是来自Boolean的静态工厂方法、将boolean基本类型值转换成一个Boolean对象引用:public static Boolean v...原创 2020-02-16 19:15:36 · 110 阅读 · 0 评论