读书笔记-《Effective JAVA》
无情的腿毛
要学的东西咋这么多?事儿te
展开
-
读书笔记-《Effective Java》第10、11条:覆盖toString方法与clone方法
第10条 始终要覆盖toString方法 提供合适的输出,会经常用到。 第11条 谨慎地覆盖clone 特别注意(谨慎的源头) 如果直接使用super.clone(),那么基本数据类型会复制,但是对象、数组这种类型就会只复制引用。 也就是说如果修改clone出来的对象的属性对象,那么原始的对象属性也会被修改。 @Override protected People...原创 2018-12-26 14:15:44 · 124 阅读 · 0 评论 -
读书笔记-《Effective Java》第9条:覆盖equals时总要覆盖hashCode
如果覆盖equals方法却不覆盖hashCode方法,那么就很有可能出现两个对象equals方法返回true,但hashCode却不一致的情况,例如:在HashMap中取不到正确的value。 HashMap的get方法是用hashCode匹配的。 public V get(Object key) { Node<K,V> e; return ...原创 2018-12-25 17:50:41 · 179 阅读 · 0 评论 -
读书笔记-《Effective Java》第8条:覆盖equals时请遵守通用约定
如果覆盖equals方法的目的是判断对象之间是否相等,那么使用超类(Object)的方法即可。 public boolean equals(Object obj) { return (this == obj); } 在覆盖equals方法的时候,必须要遵守它的通用约定: 自反性(reflexive)。对于任何非null的引用值x,x.equals(x)必须返回tr...原创 2018-12-25 14:27:34 · 140 阅读 · 0 评论 -
读书笔记-《Effective Java》第7条:避免使用终结方法
finalizer,对象在被回收前会执行一次,只会执行一次。 对象自救的最后机会。 但是,请勿使用。原创 2018-12-24 13:12:36 · 105 阅读 · 0 评论 -
读书笔记-《Effective Java》第22条:优先考虑静态成员类
如果声明成员类不要求访问外围实例,那么一定要声明成静态内部类。如果声明成内部类,那当外围类被回收后, 内部类并不会被回收,而且每次创建外围类,都会创建一个内部类指向外围类的引用。 如果一个嵌套类需要在单个方法之外仍然是可见的,或者它太长了,不适合于放在方法内部,那就做成成员类。 如果成员类的每个实例都需要一个指向其外围实例的引用,就做成非静态成员类;否则就做成静态成员类。 假...转载 2018-12-29 09:00:17 · 147 阅读 · 0 评论 -
读书笔记-《Effective Java》第6条:消除过期的对象引用
内存泄漏的三种可能 1. 类自己管理内存,一旦元素被释放掉,则该元素中包含的任何对象引用都应该被清空。 例如:ArrayList类的remove方法。 elementData[--size] = null; // clear to let GC do its work /** * Removes the element at the specified position in ...原创 2018-12-23 19:06:33 · 191 阅读 · 0 评论 -
读书笔记-《Effective Java》第5条:避免创建不必要的对象
1. 这种写法每次执行都会创建一个对象(存放于堆)。 String str1 = new String("ttt"); 改进后(存放于方法区常量池),当常量池已存在,则不会重复创建。 String str2 = "ttt"; 2. 应优先使用基本数据类型(int、long等等),要当心无意识的自动装箱。 Integer b = 3; int a = 123; b = a; 3....原创 2018-12-23 18:15:45 · 117 阅读 · 0 评论 -
读书笔记-《Effective Java》第3条、第4条: 强化Singleton属性—私有构造器或者枚举类型
第3条:用私有构造器或者枚举类型强化Singleton属性 把构造器私有这个是单例基本要求,本条介绍了一种不知道为啥没有流行起来的单例方式(实现Singleton的最佳方式),包含单个元素的枚举类型(INSTANCE不是关键字,写别的也行) package org.test; public enum People { INSTANCE; public String name ...原创 2018-12-23 16:48:01 · 148 阅读 · 0 评论 -
读书笔记-《Effective Java》第2条:遇到多个构造器参数时要考虑用构建器
当一个类有很多个属性时,创建对象的时候要么就先创建个对象然后给对象赋值,要么就根据业务需要写很多个构造器, 这样的构造器可读性差。就算用静态工厂也得写很多个,这时候就可以用构建器了。 例如: package org.test; public class People { private String name = ""; private String age = "";...原创 2018-12-23 16:06:21 · 127 阅读 · 0 评论 -
读书笔记-《Effective Java》第20、21条:函数对象策略、类层次
第20条:类层次优于标签类 第21条:用函数对象表示策略 大概是更容易维护吧 例: 1. 策略接口 public interface People { void call(String who); } 2. 实现接口的方式,实现类没有域,就像工具类, 没必要允许创建多个实例,所以用单例。 //活动play之打麻将 public enum Son1 implement...原创 2018-12-28 16:10:43 · 134 阅读 · 0 评论 -
读书笔记-《Effective Java》第1条:考虑用静态工厂方法代替构造器
优势 它们有名称 构造器没有名称, 当一个类有多个构造器的时候就不容易分清楚哪个是自己想要的。 不必在每次调用它们的时候都创建一个新对象 如果新创建的对象的成员属性是可以重用的, 那么可以先把第一次创建的对象保存起来,以后想用的时候就不用创建新的对象了。就是Singleton、实例受控的类。也可以控制对象实例的生死。因为多次调用返回统一实例的原因,要判断两个引用是否为一个对象,那么就可以...原创 2018-12-23 11:44:26 · 138 阅读 · 0 评论 -
读书笔记-《Effective Java》第18、19条:关于接口
第18条:接口优于抽象类 还是看使用场景,当演变的容易性比灵活性和功能更为重要的时候,应该使用抽象类,否则应该使用接口。 第19条:接口只用于定义类型 杜绝常量接口,不过到现在还没见过有人在接口里面只写常量的。...原创 2018-12-28 14:50:33 · 115 阅读 · 0 评论 -
读书笔记-《Effective Java》第16、17条:复合与继承
第16条:复合优于继承 如果两个类的关系是 is-a,请选用继承。例如:男人/女人 与 人类的关系。 如果两个类的关系是has-a,请选用复合。例如:腿毛 与 人类的关系。 不恰当的继承会出现错误,不只是优雅不优雅的问题。 例如: public class Son2<E> extends HashSet<E> { public int count = 0...原创 2018-12-27 22:40:45 · 126 阅读 · 0 评论 -
读书笔记-《Effective Java》第13、14、15条:控制类和成员的可访问性
第13条:使类和成员的可访问性最小化 第14条:在公有类中使用访问方法而非公有域 第15条:使可变性最小化 纯记录标题。原创 2018-12-27 16:27:01 · 183 阅读 · 0 评论 -
读书笔记-《Effective Java》第12条:考虑实现Comparable接口
实现Comparable接口的一般目的都是为了集合排序, 也可以单独调用。 重写compareTo方法,编写要比较的属性代码。 public class People implements Comparable<People> { public String name; public int age; public int age2; // ...原创 2018-12-26 15:38:37 · 135 阅读 · 0 评论 -
读书笔记-《Effective Java》第23、24、25、26、27条:请优先考虑泛型
第23条:请不要在新代码中使用原生类型 用泛型可以在编译期间发现错误。错误越早发现越好。 第24条:消除非受检警告 还是推荐用法泛型在编译期就确定好集合、列表中的类型。 @Test public void Test(){ Set s2 = new HashSet(); //被认为不安全 Set<Son2> s3 = Sets....原创 2019-01-02 23:18:00 · 177 阅读 · 0 评论