
【Effective Java】
文章平均质量分 84
AlphaWang
这个作者很懒,什么都没留下…
展开
-
【Effective Java】Ch3_Methods:Item10_始终重写toString()
虽然java.lang.Object类提供了toString方法的一个实现,但是其返回的字符串通常不是类的用户所期望看到的。它包含类的名称,接着是一个@符号,然后是哈希码的无符号十六进制表示,例如“PhoneNumber@163b91”。toString的通用约定指出返回的字符串必须“简洁而信息丰富,并易于阅读”。尽管可能有人说“PhoneNumber@163b91”算得上是简洁和易于阅读,但是与翻译 2013-05-06 17:30:15 · 1235 阅读 · 0 评论 -
【Effective Java】Ch2_创建销毁对象:Item1_考虑用工厂方法替代构造函数
本章的主题是创建和销毁对象:何时创建、怎样创建;何时应该避免创建、如何避免创建;如何确保对象适时被销毁;如何管理对象销毁前的清理动作。 一个类如果要允许客户获得其实例,常用方法是提供一个public的构造函数。还有另外一个方法,也应该在每个程序员的工具集中占有一席之地:类可以提供一个public的静态工厂方法,这个方法返回类的实例。【例】下面是Boolean类(基本类型b翻译 2013-01-08 15:04:43 · 1588 阅读 · 1 评论 -
【Effective Java】Ch3_Methods:Item12_考虑实现Comparable接口
与本章讨论的其他方法不同,compareTo方法并不是在Object类中声明的。相反,它是Comparable接口中的唯一方法。它与Object的equals方法有点类似,但它不仅仅是简单地进行相等性比较,还能执行顺序比较,同时它还是个泛型。类实现Comparable接口后,就表明其实例拥有自然顺序。若要对实现了Comparable接口的对象数组进行排序,只需要执行:Arrays.sort翻译 2013-05-22 13:27:05 · 1582 阅读 · 0 评论 -
【Effective Java】Ch4_Class:Item13_最小化类及其成员的可访问性
要区别一个模块是否设计良好,最重要的因素是,对于其他模块而言该模块隐藏其内部数据和其他实现细节的程度。设计良好的模块应该隐藏所有实现细节,将API与其实现清晰地隔离开来。这样,模块之间通过他们的API进行通信,而不必知道其他模块的内部工作情况。这个概念被称为信息隐藏(information hiding)或封装(encapsulation),是软件涉及的基本原则之一。翻译 2013-07-09 17:57:06 · 1449 阅读 · 0 评论 -
【Effective Java】Ch2_创建销毁对象:Item4_通过私有构造函数来强化不可实例化的能力
偶尔情况下,你会编写只包含静态方法和静态域的类。这种类的名声不太好,因为有些人滥用他们来避免面向对象编程,不过这种类确实有他们的用处。我们可以照java.lang.Math或java.util.Arrays的样子,用这种类将基本类型或数组上相关的方法组织起来;public class Arrays { public static void fill(long[] a, lo翻译 2013-01-21 15:32:48 · 1007 阅读 · 0 评论 -
【Effective Java】Ch4_Class:Item14_在public类中应该使用访问方法而不是public域
public类永远不要暴露其可变的字段。而public类暴露其不可变字段随然是有问题,但危害性要小一些。然而,package-private或者private的嵌套类暴露其字段则是可行的,无论该字段是可变还是非可变。翻译 2013-07-26 16:52:05 · 1713 阅读 · 0 评论 -
【Effective Java】Ch1_简介
本书旨在帮助你最高效地使用Java语言及其基础类库,包括java.lang、java.util,以及小部分的java.util.concurrent、java.io。本书也会不时地讨论其他类库,不过不会涵盖图形用户界面、企业级API以及移动设备相关类库。 本书包含78个条目,每个条目讨论一个规则,这些规则代表了最优秀最有经验的程序员们的有益实践。这些规则松散地归为十个章节,每个翻译 2013-01-05 17:21:02 · 1073 阅读 · 0 评论 -
【Effective Java】Ch2_创建销毁对象:Item3_通过私有构造函数或枚举类型来强化Singleton属性
所谓Singleton,是指仅能被实例化一次的类。Singleton通常代表本质上唯一的系统组件,例如窗口管理器或文件系统。让一个类成为Singleton就无法为Singleton替换模拟实现,除非它实现一个作为其类型的接口,所以会让其客户端难于测试。 JDK1.5之前,有两种方法可以实现Singleton,二者均基于让构造函数私有化,并导出一个公共静态成员来提供对唯一实例的访问翻译 2013-01-15 15:53:52 · 1633 阅读 · 0 评论 -
【Effective Java】Ch2_创建销毁对象:Item7_避免使用finalize方法
Finalizer通常是不可预测的、危险的、不必要的。使用finalizer会导致不稳定的行为、低下的性能、以及可移植问题。Finalizer也有其可用之处,本文稍后会做介绍,但是作为一个首要法则,你必须避免使用finalizer。 C++程序员需要注意Java中的finalizer并不类似C++中的析构方法destructor。C++的析构方法是回收一个对象相关的资源的常用途径翻译 2013-02-19 17:56:17 · 2253 阅读 · 0 评论 -
【Effective Java】Ch2_创建销毁对象:Item6_消除无用的对象引用
当你从手工管理内存的语言(如C、C++)转到自动垃圾回收的语言后,编程工作会变得更加轻松,因为对象用完后会被自动回收。当你第一次经历自动垃圾回收的时候,会觉得不可思议。这容易给人一个印象:你无需考虑内存管理。其实不然。 【例】考虑下面这个简单的stack实现:// Can you spot the memory leak?public class Stack{ pr翻译 2013-01-30 17:34:04 · 1642 阅读 · 0 评论 -
【Effective Java】Ch2_创建销毁对象:Item5_避免创建不必要的对象
通常最好重用单个对象,而不是在每次需要时都创建一个功能完全一样的新对象。重用不仅更快而且更流行。如果对象是不可变的(Immutable,Item15),那它总是能被重用的。 看下面这个极端的反例:String s = new String("stringette"); // DON'T DO THIS! 这条语句每次执行的时候都会创建一个新的String翻译 2013-01-25 15:43:03 · 1369 阅读 · 0 评论 -
【Effective Java】Ch3_Methods:Item11_谨慎重写clone()
Cloneable接口的目的是作为对象的一个mixin接口,表明对象允许克隆;但这个目的没有达到。其主要缺点是,Cloneable缺少一个clone()方法,而Object.clone()是受保护的。通常,实现接口是为了表明类可以为它的客户做些什么;而Cloneable却是改变了超类中受保护方法的行为。Object.clone()定义的约定:/**创建并返原创 2013-05-09 15:45:49 · 1421 阅读 · 0 评论 -
【Effective Java】前言
如果一个同事跟你说:“我的配偶今天晚上在家制造了特别的晚餐,你愿意参加吗?”你的脑子应该会闪过三个念头:首先,你被邀请去参加晚餐;第二,英语不是你同事的母语;最后,一堆费解。 如果你学过外语并试图在课堂之外使用,你肯定知道你得掌握三件事:这门语言是如何组织的(语法)、如何命名你想说的事物(词汇)、如何用习惯并有效的方式表达出日常的事物(用法)。课堂上通常仅仅涵盖前两点,而当你试图翻译 2013-01-05 15:40:02 · 1024 阅读 · 0 评论 -
【Effective Java】Ch2_创建销毁对象:Item2_当构造函数参数过多时考虑使用builder
静态工厂和构造函数都有一个限制:可选参数数量很大时,他们都不能很好地扩展。考虑一下这个例子:用一个类来表示袋装食品上的营养成分标签,这些标签有几个必选字段:每份的含量、每罐的份数、每份的卡路里;还有超过20个可选字段:总脂肪含量、饱和脂肪含量、转化脂肪含量、胆固醇含量、钠含量等等。大多数产品只有少数几个可选字段是非零值。 你将为这种类编写怎样的构造函数或者静态工厂呢?程序翻译 2013-01-11 14:59:37 · 2365 阅读 · 1 评论 -
【Effective Java】Ch3_Methods:Item9_重写equals时总要重写hashCode()
一个常见的bug原因是没有覆盖hashCode方法。在每个覆盖了equals的类中,都必须覆盖hashCode。如果不这样,则会导致违反Object.hashCode()的通用约定,导致在与所有基于哈希码的集合无法一起正常工作,包括HashMap、HashSet、Hashtable。 如下是Object规范中的通用约定:在程序的一次执行中只要equals方法所用到的信息没翻译 2013-04-27 10:42:25 · 1292 阅读 · 0 评论 -
【Effective Java】Ch3_Methods:Item8_重写equals方法时遵循通用约定
虽然Object类是一个具体类,但它主要还是用于扩展。因为其所有nonfinal方法(equals、hashCode、toString、clone以及finalize)都是为重写设计的,所以这些方法都有显式的通用约定。任何重写这些方法的类都有责任遵循这些通用约定;若未做到这一点,则其他依赖于这些约定的类就不能与之一起正常运作。 本章讲述何时如何覆盖Object中的nonfinal翻译 2013-03-20 16:45:59 · 1523 阅读 · 0 评论 -
【Effective Java】Ch4_Class:Item15_使可变性最小化
不可变类是指其实例不可被修改的类。实例中的所有信息都是在创建实例时提供的,并且在对象生命周期内保持不变。JDK中有许多这种不可变类,例如String、基本类型包装类、BigInteger、BigDecimal。不可变类有许多优点:易于设计、易于实现、易于使用。它们更不容易出错,并且更安全。翻译 2013-11-07 10:45:10 · 4516 阅读 · 0 评论