代码改变世界

随笔分类 - effective_java

使类和成员的可访问性最小化

2017-03-26 17:23 by ttylinux, 426 阅读, 收藏, 编辑
摘要:本文涉及到的概念 1.使类和成员的可访问性最低的意义 2.类和成员的几种可访问性 3.其它注意事项 4.最后的原则 1.使类和成员的可访问性最低的意义 信息隐藏(information hiding),封装(encapsulation)的概念 一个模块对外部模块隐藏其内部数据和其他实现细节,也就是将 阅读全文

谨慎重载clone方法

2017-03-19 16:42 by ttylinux, 637 阅读, 收藏, 编辑
摘要:本文涉及到的概念 1.浅拷贝和深拷贝 2..clone方法的作用和使用方式 3.拷贝构造器和拷贝工厂 1.浅拷贝和深拷贝 浅拷贝 一个类实现Cloneable接口,然后,该类的实例调用clone方法,返回一个新的实例。 新的实例与原来的实例是不同的对象。 新的实例的各个非引用类型的成员变量值与原来的 阅读全文

始终要重载toString

2017-03-16 21:25 by ttylinux, 434 阅读, 收藏, 编辑
摘要:本文涉及到的概念 1.重载toString方法的意义 2.两个注意事项 1.重载toString方法的意义 重载toString,返回关于当前实例的描述信息。这在调试错误,打印实例信息时,可以带来有意义的信息。如果不重载,使用默认的toString实现,返回的含义不清楚。重载toString的目的是 阅读全文

覆盖equals时总要覆盖hashCode

2017-03-16 21:00 by ttylinux, 354 阅读, 收藏, 编辑
摘要:本文涉及到的概念 1.为什么重载equals方法时,要重载hashCode函数;没有重载hashCode带来的问题 2.一个对象hashCode的生成规则 1.为什么重载equals方法时,要重载hashCode函数 “ 一个很常见的错误根源在于没有覆盖hashCode方法。在每个覆盖了equals 阅读全文

重载equals方法时要遵守的通用约定--自反性,对称性,传递性,一致性,非空性

2017-03-12 21:25 by ttylinux, 4028 阅读, 收藏, 编辑
摘要:本文涉及到的概念 1.为什么重载equals方法时,要遵守通用约定 2.重载equals方法时,要遵守哪些通用约定 为什么重载equals方法时,要遵守通用约定 Object类的非final方法都有明确的通用约定,这些方法是被设计成被重载的。重载时,如果不遵守通用约定,那么,其它依赖于这些通用约定的 阅读全文

Try finally的一个实验和为什么避免重载 finalize()方法--例子

2017-03-12 09:36 by ttylinux, 280 阅读, 收藏, 编辑
摘要:输出结果: runing something do final work 也就是,只要存在try finally,那么,finally包围的语句块一定会执行。 ////////////////////////////////////////////////////////////////////// 阅读全文

消除过期的对象引用

2017-03-12 08:31 by ttylinux, 612 阅读, 收藏, 编辑
摘要:本文涉及的概念 1.Java的内存泄露 2.出现Java内存泄露的几种常见场景 Java的内存泄露 Java语言,创建对象后,程序员不用手动回收对象。Java虚拟机会手动回收不使用的对象(没有引用指向该对象)。那么,为什么还出现泄露。Java的内存泄露是指这样一种情况,创建一个对象,系统中依然存在引 阅读全文

如何避免创建不必要的对象

2017-03-05 22:31 by ttylinux, 372 阅读, 收藏, 编辑
摘要:本文涉及到的概念 1.在保证程序清晰性和简洁性的基础下,重用具有相同功能的对象,避免创建新的对象 2.适配器对象,adapter Object 3.自动装箱,基本数据类型和装箱类型 在保证程序清晰性和简洁性的基础下,重用具有相同功能的对象,避免创建新的对象 当该对象的状态是不变化的,新创建的对象具有 阅读全文

如何让一个类不能被实例化

2017-03-05 11:56 by ttylinux, 5399 阅读, 收藏, 编辑
摘要:本文涉及的概念: 1.在面向对象编程中,在什么场景下会需要做到让一个类不能被实例化 2.让一个类不能被实例化的方法 什么样的场景会需要让一个类不能被实例化 工具类(utility class),实例化对它们没有意义的工具类。这时候,就要做到不让该类被实例化 java.lang.Math: 把与Mat 阅读全文

单例模式--反射--防止序列化破坏单例模式

2017-03-03 23:21 by ttylinux, 9892 阅读, 收藏, 编辑
摘要:本文牵涉到的概念: 1.单例模式------唯一最佳实现方式,使用枚举类实现 2.单例模式的几种实现,各自的缺点 3.反射;反射是如何破坏单例模式 4.序列化;序列化如何破坏单例模式 单例模式 单例模式,是指在任何时候,该类只能被实例化一次,在任何时候,访问该类的对象,对象都是同一的,只有一个。 单 阅读全文

遇到构造器中有多个可选参数时要考虑用构建器

2017-03-01 23:05 by ttylinux, 246 阅读, 收藏, 编辑
摘要:最近重新阅读《Effectiva Java》,以前是刚写程序不久的时候阅读,读的的时候迷迷糊糊。现在,比以前好多了,读了,明白它的含义。 本文涉及的概念: a.重叠构造器 b.JavaBean c.Builder构建器模式 d.对象状态一致性,唯一性;线程安全 场景: 1.一个类,有过个构造器,每个 阅读全文

考虑用静态工厂方法代替构造器的场景

2017-02-28 23:21 by ttylinux, 244 阅读, 收藏, 编辑
摘要:总结点,使用场景: a.当你尝试使用多个构造器,然后,每个构造器的区别是签名(参数类型或者参数顺序不同或者参数数量不同),那么,这个时候,可以考虑使用静态工厂方法来替代构造器。“如果构造器的参数本身没有确切地描述正被返回的对象,那么具有适当名称的静态工厂会更容易使用,产生的客户端代码也更易于阅读” 阅读全文

Item 30 用enum代替int常量类型枚举,string常量类型枚举

2015-04-26 22:58 by ttylinux, 414 阅读, 收藏, 编辑
摘要:1.用枚举类型替代int枚举类型和string枚举类型publicclassShow {//Int枚举类型// public static finalintAPPLE_FUJI = 0;// public static finalintAPPLE_PIPPIN = 1;// public stati... 阅读全文

Item 29 优先考虑类型安全的异构容器

2015-04-19 22:21 by ttylinux, 302 阅读, 收藏, 编辑
摘要:集合API展示了泛型的一般用法。但是它们(Set,HashMap,Map)限制了每个容器只能有固定数目的类型参数。比如Set集合,HashMap集合:importjava.util.HashMap;importjava.util.HashSet;importjava.util.Map;importj... 阅读全文

Item 28 利用有限制通配符来提升API的灵活性

2015-04-19 17:29 by ttylinux, 213 阅读, 收藏, 编辑
摘要:和的使用的使用Item 26这是堆栈的公有API:public class Stack{ public Stack(); public void push(E e); public E pop(); public boolean isEmpty();public void pushAll(Iter... 阅读全文

Item27--优先考虑泛型方法

2015-04-12 20:00 by ttylinux, 357 阅读, 收藏, 编辑
摘要:类型推导:发生在以下三个地方。1.Java编译器根据泛型方法传入的参数,推导出具体的类型。2.Java编译器,根据泛型构造器传入的类型来推导出实际要构造的实例类型。3.Java编译器根据表达式的目标类型(TargetType)来确定出实际的类型参数。一、类型推导的例子:1.通过泛型方法的实际参数类型... 阅读全文

Item 12 考虑实现Comparable接口

2015-03-29 15:53 by ttylinux, 372 阅读, 收藏, 编辑
摘要:1.Comparable接口,用来做什么。2.判定类实现的Comparable接口是否正确的方法。3.不要扩展一个已经实现了Comparable接口的类来增加用于比较的值组件。1.Comparable接口,用来做什么?---Comparable接口-----public interface Comp... 阅读全文

Item 11 谨慎地覆盖Clone

2015-03-25 22:30 by ttylinux, 147 阅读, 收藏, 编辑
摘要:1.进行浅拷贝时,只是复制原始数据类型的值,则可以通过覆盖Clone方法来达到。另外,在进行浅拷贝的时候,还要注意,成员对象中不应该要有引用类型,如果有引用类型,那么,进行了浅拷贝之后,两个对象将会共享成员引用所指向的对象,这会出现问题。所以,在这种情况下,干脆直接使用深拷贝,避免问题出现。2.... 阅读全文

Item 9 覆盖equals时总要覆盖hashCode

2015-03-24 23:09 by ttylinux, 155 阅读, 收藏, 编辑
摘要:为什么覆盖equals时,总要覆盖hashCode?原因是,根据Object规范:如果两个对象根据equals(Object)方法比较是相等的,那么调用这两个对象中任意一个对象的hashCode方法都必须产生同样的整数结果。如果违反这个规定,那么,在使用应用了散列码的集合(HashMap,HashS... 阅读全文

Item 8 覆盖equals时请遵守通用约定

2015-03-24 20:53 by ttylinux, 131 阅读, 收藏, 编辑
摘要:在覆盖equals方法的时候,你必须要遵守它的通用约定,不遵守,写出来的方法,会出现逻辑错误。下面是约定的内容:equals方法实现了等价关系:自反性。对于任何非null的引用值,x.equals(x)必须返回true。对称性。对于任何非null的引用值x和y,当且仅当y.equals(x)返回tr... 阅读全文