effective-java
文章平均质量分 56
wujunyucg
这个作者很懒,什么都没留下…
展开
-
Effective Java - 对于所有对象都通用的方法 - 覆盖 equals 时请遵守通用约定
读书笔记 仅供参考不覆盖 equals 方法许多覆盖方式会导致错误,并且后果十分严重,最容易避免错误的方法就是不覆盖 equals 方法。每个类的实例都只与自身相等。类的每个实例本质上都是唯一的不关心类是否提供了“逻辑相等”的功能超类已经覆盖了 equals,从超类继承过来的行为对子类也是合适的(例如 List 从 AbstractList 继承 equals)如果类是私有的或包级私有,可以原创 2017-11-05 20:51:13 · 167 阅读 · 0 评论 -
Effective Java - 类和接口 - 复合优先于继承
读书笔记 仅供参考继承的安全性(非接口)继承使用不当,会导致软件变得脆弱。 在包的内部使用继承是安全的,子类和超类的受一个程序员控制。 专门为继承而设计,具有良好文档说明的类是安全的。 跨包继承就是很危险的,继承打破了封装性,简单的说,不知道一些类的内部是如何实现的,随便加功能并且依靠超类的实现就是不靠谱的。 超类还会继续演进,子类新加的方法或域可能会超类冲突解决办法使用复合,产生一个包装类原创 2017-11-17 19:33:53 · 281 阅读 · 0 评论 -
Effective Java - 类和接口 - 要么为继承而设计,并提供文档说明,要么就禁止继承
读书笔记 仅供参考文档需要说明该方法调用了哪些可覆盖的方法,以什么顺序,调用结果有什么影响,在哪些情况会调用可覆盖的方法 决定应该暴露哪些受保护的方法或域是很难的。 对于为了继承而设计的类,唯一的测试方法就是编写子类(3个就可以测试) 构造器不能调用可被覆盖的方法原创 2017-11-17 20:01:55 · 299 阅读 · 0 评论 -
Effective Java - 类和接口 - 在公有类中使用访问方法而非公有域
读书笔记 仅供参考即类数据域应该封装,使用 getter 和 setter 方法来读写包级私有或私有的嵌套类,可以直接暴露数据域原创 2017-11-14 13:07:02 · 171 阅读 · 0 评论 -
Effective Java - 类和接口 - 使可变性最小化
读书笔记 仅供参考不可变类不可变类就是实例不能被修改的类,每个实例中包含的所有信息都必须在创建该实例的适合提供,并一直固定不变 不可变类比可变类更加易于设计、实现和使用,不容易出错,且更加安全五条规则不提供任何修改对象状态的方法保证类不会被扩展所有域都是 final所有域都是私有确保对于任何可变组件的互斥访问(对可变对象的引用)函数的做法方法返回一个函数的结果,函数对操作数进行运算但是原创 2017-11-14 13:45:31 · 209 阅读 · 0 评论 -
Effective Java - 创建和销毁对象 - 避免使用终结方法
读书笔记 仅供参考Java 的终结方法和 C++ 的析构函数不是相同的事物,C++ 的析构函数可以用来回收对象所占用的资源,而 Java 有垃圾回收器自动回收。如果确实有关闭资源的需要,使用 try-finally 或 try-with-resource( Java 1.7)。缺点一由于 Java 的资源确定是否回收是有可达性确定(详见 Java 虚拟机),但是从一个对象不可达到终结方法执行,中间的原创 2017-11-04 21:17:22 · 226 阅读 · 0 评论 -
Effective Java - 类和接口 - 接口优于抽象类
读书笔记 仅供参考接口和抽象类抽象类允许某些方法的实现,但是接口不允许(JDK 1.8 已经运行了)现有类必须成为抽象类的子类,但是只能单继承,接口可以多继承接口优点现有类可以很容易被更新,以实现新的接口只需要在接口中添加方法就可以了接口是定义 mixin (混合类型)的理想选择mixin:类除了实现它的“基本类型”之外,还可以实现 mixin 类型,表明它提供了可供选择的行为,例如 Comp原创 2017-11-17 20:42:43 · 345 阅读 · 0 评论 -
Effective Java - 类和接口 - 接口只用于定义类型
读书笔记 仅供参考当类实现实现接口时,接口就可以充当引用这个类的实例的类型。为了任何其他目的而定义接口是不恰当的。常量接口这种接口不包含任何方法,只包含静态的 final 域。 常量接口模式是对接口的不良使用。正确方法使用枚举使用不可实例化的工具类原创 2017-11-20 20:02:32 · 186 阅读 · 0 评论 -
Effective Java - 类和接口 - 类层次优于标签类
读书笔记 仅供参考标签类一种带有多种风格实例的类 下面这个可以代表圆和矩形class Figure { enum Shape {RECTANGLE, CIRCLE}; final Shape shape; double length; double width; double radius; Figure(double raduis) {原创 2017-11-20 20:15:51 · 201 阅读 · 0 评论 -
Effective Java - 类和接口 - 用函数对象表示策略
读书笔记 仅供参考函数指针,代理,lambda就是将函数存储起来并传递,之前的 java 是不支持的,所以有这一章的替代内容,但是 1.8 已经支持 lambda。策略模式例子:比较器函数 在 c 语言中,qsort 函数要求使用一个指向比较器函数的指针作为参数,不同的比较器函数可以得到不同的排序结果,这就是一种策略函数对象如果一个类仅仅导出一个方法,它的实例就等同于一个指向该方法的指针,这样的实原创 2017-11-20 20:31:55 · 211 阅读 · 0 评论 -
Effective Java - 类和接口 - 使类和成员的可访问性最小化(java 访问级别)
读书笔记 仅供参考封装:隐藏了模块的实现细节可以有效地解除系统之间的耦合关系对于顶层的类和接口,只有两种可能的访问级别:包级私有(即缺省)和 public。包级私有意味着是这个包的实现的一部分,而 public 意味着是包的 API 的一部分。需要降低不必要 puclic 类的可访问性。private:只有在声明该成员的类内部可用default:声明该成员的包内部的类都可以访问protecte原创 2017-11-13 21:08:55 · 209 阅读 · 0 评论 -
Effective Java - 对于所有对象都通用的方法 - 考虑实现 Comparable 接口
读书笔记 仅供参考compaerTocompareTo 方法没有在 Object 中声明,而是 Comparable 接口中唯一的方法,类实现了 Comparable 接口,就代表可以进行排序。//可以简单地对数组进行排序Arrays.sort(a);一旦实现了 Comparable 接口,就可以和许多泛型算法和依赖于该接口的集合实现进行协作。public interface Comparable原创 2017-11-13 20:45:05 · 170 阅读 · 0 评论 -
Effective Java - 创建和销毁对象 - 遇到多个构造器参数时要考虑用构建器
读书笔记 仅供参考静态工厂和构造器的局限性不能很好地扩展到大量的可选参数重叠构造器模式提供一个只有必要参数的构造器,其余构造器逐渐增加可选参数,直到最后一个构造器包含所有可选参数public class NutritionFacts { private final int servingSize; private final int servings; private fin原创 2017-10-30 21:31:15 · 320 阅读 · 0 评论 -
Effective Java - 对于所有对象都通用的方法 - 覆盖 equals 时请总要覆盖 hashCode
读书笔记 仅供参考Object.hashCode 通用约定如果在覆盖了 equals 方法的类中没有覆盖 hashCode 方法,就会违法 Object.hashCode 的通用约定,导致所有基于 hash 的集合无法正常运作。 约定如下在应用程序的执行期间,只要对象的 euqals 方法的比较操作所用的信息没有被修改,那么对于同一个对象的调用多次,hashCode 方法都必须始终如一返回同一个原创 2017-11-08 21:20:55 · 217 阅读 · 1 评论 -
Effective Java - 创建和销毁对象 - 用私有构造器或者枚举类型强化 Singleton 属性
读书笔记 仅供参考Singleton: 仅被实例化一次的类(单例)。通常用来代表本质上唯一的系统组件。方法一:公有静态 final 成员(Java 1.5 之前便可以使用)public class Elvis { public static final Elvis INSTANCE = new Elvis(); //私有构造函数 private Elvis(){ ... }原创 2017-10-31 17:03:24 · 200 阅读 · 0 评论 -
Effective Java - 创建和销毁对象 - 通过私有构造器强化不可实例化的能力
读书笔记 仅供参考不可实例化类不希望被实例化,例如工具类,包含的都是静态方法和静态属性,实例对它没有任何意义。错误的做法将类做成抽象类。 原因:抽象类可以被继承,子类可以被实例化。正确的做法包含一个私有的构造器。 坏处:类不能被子类化。原创 2017-11-01 20:27:57 · 133 阅读 · 0 评论 -
Effective Java - 创建和销毁对象 - 避免创建不必要的对象
读书笔记 仅供参考方法一使用静态工厂方法方法二使用不可变对象,例如 String 正确使用String s = "stringette";错误使用String s = new String("stringette");后者会每次调用都创建一个 String 对象,前者则是从常量池中取出相同的对象。方法三重用已知不会被修改的对象错误例子//判断一个人是否在 1946-1964 年间出身public原创 2017-11-01 20:51:56 · 188 阅读 · 0 评论 -
Effective Java - 创建和销毁对象 - 消除过期的对象引用
effective java 读书笔记 仅供参考Java 一个很重要的特色就是垃圾回收,但是它也不是万能的,有兴趣的可以阅读《深入理解 Java 虚拟机》一段经典的内存泄漏案例public class Stack { private Object[] elements; private int size = 0; private static final int DEFAU原创 2017-11-01 21:23:32 · 234 阅读 · 0 评论 -
Effective Java - 对于所有对象都通用的方法 - 始终要覆盖 toString
读书笔记 仅供参考不覆盖 toStringObject 提供了一个 toString 方法的实现,但是它返回不是用户希望得到的关于类中信息的字符串,而是 PhoneNumber@163b91,这种由 类名+@+16进制 hash code。 不覆盖的话,在调试的时候打出的日志完全没有办法去识别信息。覆盖toString 方法应该返回对象中包含的所有值得关注的信息。 toString 方法的格式应原创 2017-11-11 20:35:01 · 151 阅读 · 0 评论 -
Effective Java - 创建和销毁对象 - 静态工厂方法代替构造器
静态工厂方法代替构造器读书笔记,仅供参考ps: 静态工厂方法只是一个返回类的实例的静态方法, 与设计模式中的工厂方法并不一样public static Boolean valueOf(boolean b) { return b? Boolean.TRUE: Bolean.FALSE;}工厂方法的优势拥有名称构造器的参数有时无法确切的描述返回的对象,静态工厂方法可以通过方法名进行表示, 所以原创 2017-10-25 21:55:42 · 556 阅读 · 0 评论 -
Effective Java - 对于所有对象都通用的方法 - 谨慎地覆盖 clone
读书笔记 仅供参考Cloneable 接口Cloneable 借口表明这样的对象允许克隆,但是它缺少 clone 方法。 Object 拥有一个 受保护的 clone 方法,如果不采用反射,无法调用。 Cloneable 中并没有方法,它只是决定了 Object.clone() 的实现行为:如果一个类实现了 Cloneable,clone 方法就会返回对象的逐级拷贝,否则抛出 CloneNotS原创 2017-11-13 20:16:48 · 198 阅读 · 0 评论 -
Effective Java - 类和接口 - 优先考虑静态成员类
读书笔记 仅供参考嵌套类嵌套类是指被定义在一个类内部的类,存在的目的应该只是为它的外围类提供服务。 四种嵌套类静态成员类非静态成员类匿名类局部类后面三种被称为内部类。静态成员类静态成员类可以认为是碰巧被声明在另一个类的内部而已。 静态成员类常见用法是作为公有的辅助类,这个公有是指的外围类的实例。非静态成员类从语法上讲,与静态成员类的区别就是没有 static 修饰符。其实有很大不同。原创 2017-11-20 20:51:44 · 177 阅读 · 0 评论