摘要:
为什么复合优先于继承? 1.继承违反了封装原则,打破了封装性 2.继承会不必要的暴露API细节,称为隐患.比如通过直接访问底层使p.getProperty(K,V)的键值对可以不是String类型 3.继承限定了类的性能,它会把它的缺陷传递给子类1.复合:不... 阅读全文
2017年3月2日 #
2017年2月28日 #
摘要:
概念: 不可变类是其实例不能被修改的类,不可变类比可变类更加易于设计 实现和使用.它们不容易出错,而且更加安全. 优点 1.不可变对象只有创建时状态. 2.不可变对象本质上是线程安全的,它们不要求同步 3.不可变对象和其内部信息可以被自由共享.这条导... 阅读全文
摘要:
1.公有类永远都不应该暴露可变的域.如果域是不可变的,暴露公有类的危害就要小一些. 但是,有时候需要用包级私有的或者私有的嵌套类来暴露域,无论这个类是否可变 2.如果公有类暴露了它的访问域,要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布隔出来当域被读取的时候,... 阅读全文
2017年2月26日 #
摘要:
1.为什么要使类和成员可访问性最小化 它可以有效地解除组成系统的各模块之间的耦合关系,使得这些模块可以独立的开发 测试 优化 使用 理解和修改.提高软件的可重用性 2.成员的访问级别 私有(private):只有在声明该成员的顶层类内部才可以访问这个成员 包... 阅读全文
2017年2月24日 #
摘要:
考虑实现Comparable接口compareTo方法 Comparable接口的唯一方法,允许进行简单的等同性比较,允许执行顺序比较 Comparable接口被所有值类实现.所以如果一个值类有非常明显的内在排序关系,应该考虑实现该接口 public... 阅读全文
摘要:
java中的cloneclone构造器及其静态工厂的变形 优点:它们不依赖于某一种很有风险的,语言之外的对象创建机制; 它们不要求遵守尚未制定好文档的规范 他们不会于final域的正常使用发生冲突 它们不会抛出不必要的受... 阅读全文
摘要:
覆盖equals是视情况覆盖toString 1.toString返回字符串 className@163b91 -calssName 类的名称 @ @ 163b91 散列码的无符号十六进制表示法 2.toString方法应该返回对象中包含的所有值得关注的信息 ... 阅读全文
摘要:
覆盖equals是总要覆盖hashCode通过散列函数将集合中不相等的实例均匀的分布在所有可能的散列值上 1.把某个非零的常数值保存在一个名为result的int类型变量中 2.对于对象中每个关键域f(指equals方法中涉及的每个域),完成以下步骤: a.为该域计算int... 阅读全文
摘要:
覆盖equals是要遵守的约定1.覆盖种类: -类的每个1实例本质上都是唯一的 -不关心类是否提供了”逻辑相等”的测试功能(Random测试是否能随机相同数字) -超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的(Set List Map)... 阅读全文
摘要:
避免使用终结方法1.使用终结方法会导致行为不稳定,性能降低,以及可移植性的问题.(终结线程的优先级过低) 终结方法不能保证被及时的执行(从一个对象变得不可到达开始,到中介方法被执行,所花费的时间是任意长的)2.怎么不编写终结方法:提供一个显式的终止方法,并要求该类的客户端在每个... 阅读全文