Effective Java 第 24 条:消除非受检警告

用泛型编程时,会遇到许多编译器警告:非受检强制转化警告(unchecked cast warnings)、非受检方法调用警告、非受检普通数组创建警告、以及非受检转换警告(unchecked conversion warnings)。当你越来越熟悉泛型之后,遇到的警告也会越来越少,但是不要期待从一开...

2013-08-09 18:35:56

阅读数 2742

评论数 0

Effective Java 第 23 条: 请不要在新代码中使用原生态类型

从jdk1.5版本开始,java就引入了泛型。在没有泛型之前,从集合中取出的对象都必须经过转型,才能够达到使用。在jdk1.5之前,如果往集合中插入了不同类型的对象的话,那么在遍历的时候就可能引起运行时转型失败。 泛型定义:A class or interface whose declaratio...

2013-08-09 17:22:14

阅读数 2476

评论数 0

Effective Java 第 22 条:优先考虑静态成员类

嵌套类(nested class)是指被定义在另一个类的内部的类。嵌套类存在的目的应该是为它的外围类(enclosing class)提供服务。如果嵌套类将来可能会用于其他的某个环境中,它就应该是顶层类(top-level class)。嵌套类有四种:静态成员类(static member cla...

2013-08-09 12:00:49

阅读数 2931

评论数 0

Effective Java 第 21 条: 用函数对象表示策略

有些语言支持函数指针(function pointer)、代理(delegate)、lambda表达式(lambda expression),或者支持类似的机制,允许程序把“调用特殊函数的能力”存储起来并传递这种能力。这种机制通常用于允许函数的调用者通过传入第二个函数,来指定自己的行为。 ...

2013-08-08 23:51:03

阅读数 2851

评论数 0

Effective Java 第 20 条: 类层次优于标签类

有时候,可能会遇到带有两种甚至更多种风格的实例的类,并包含表示实例风格的标签(tag)域。例如,考虑下面这个类,它能够表示圆形或者矩形:

2013-08-08 15:21:44

阅读数 2550

评论数 0

Effective java 第 19 条: 接口只用于定义类型

当类实现接口时,接口就充当可以引用这个类的实例的类型(type)。因此,类实现了接口,就表名客户端可以对这个类的实例实施某些动作。为了任何其他目的的而定义的接口是不恰当的。 有一种接口被称为常量接口(constant interface) ,它不满足上面的条件。这种接口没有包含任何方法,它只包含静...

2013-08-08 11:55:46

阅读数 3066

评论数 1

Effective Java 第 18 条:接口优于抽象类

Java程序设计语言提供了两种机制,可以用来定义允许多个实现的类型:接口和抽象类。这两种机制之间最明显的区别在于,抽象类允许包含某些方法的实现,接口则不允许。一个更为重要的区别在于,为了实现由抽象类定义的类型,类必须成为抽象类的一个子类。任何一个类,只要它定义了所有必要的方法,并且遵守通用约定,它...

2013-08-07 17:57:16

阅读数 2531

评论数 0

Effective Java 第17条:要么为了继承而设计,并提供文档说明,要么禁止继承

其实在 16 条中说过继承的缺点:  可能会导致子类很脆弱,如果超类用了自用模式并且没有提供相关的文档说明。  后期版本更新中,有可能导致子类实现的方法和超类中同名,从而成为覆盖父类方法。 所以设计超类的时候需要注意这些实质性的规则: 首先,该类的文...

2013-08-03 22:55:59

阅读数 2371

评论数 0

Effective Java 第16条 : 复合优先于继承

继承(指的是子类扩展超类,并不包含接口)是实现代码重用的有力手段,但它并不总是完成这项工作的最佳工具。不适当地使用继承会导致脆弱的软件。      与方法调用不同的是,继承打破了封装性。换句话说子类依赖于超类中特定功能的实现细节。超类的实现可能随着发行版本而变化,就有可能影响子类。因此,子类必须...

2013-08-03 15:36:52

阅读数 2662

评论数 0

Effective Java 第 15 条: 使可变性最小化

不可变类只是实例不能被修改的类。每个实例中包含的所有信息都必须在创建实例的时候就提供,并在对象的整个生 命周期(lifetime)内固定不变。Java 平台类库中包含许多不可变的类,其中有String、基本类型包装类、BigInteger 和 BigDe cimal。存在不可变的类有许多理由:不可...

2013-08-02 12:12:45

阅读数 2300

评论数 0

Effective Java 第14条:在公有类中使用访问方法而非公有域

转载: http://yanfeichening.iteye.com/blog/1497657 如果类可以在它所在包的外部进行访问,就提供访问方法。 如果类是包私有的,或者私有的嵌套类,直接暴露它的数据域并没有本质的错误。 总之,公有类永远都不应该暴露可变的域。虽然还...

2013-08-01 18:01:25

阅读数 2310

评论数 0

Effective Java 第13条 : 使类和成员的可访问性最小化

转载地址: http://www.blogjava.net/kuuyee/archive/2013/06/14/400560.html 软件设计的基本原则之一,就是系统要模块化,模块之间只通过他们的API进行通信,一个模块不需要知道其他模块的内部工作情况,这个概念称作信息隐藏(i...

2013-08-01 17:54:25

阅读数 2346

评论数 0

Effective Java 第8条:覆盖equals时要遵守通用约定

转载 : http://architecture3.riaos.com/?p=3092399 覆盖equals方法貌似很简单,但是有许多覆盖方式会导致错误,所以们应该做到要么不覆盖equals方法,要么覆盖时就要遵守通用约定。 一、什么情况下可以不覆盖equals方法 如果不覆盖equals...

2013-07-31 23:27:39

阅读数 2167

评论数 0

Effective Java 第7条:避免使用终结函数

终结函数(finalizer)是不可预测的,通常也是很危险的,一般情况下是不必要的。使用终结函数会导致行为不稳定、降低性能,以及可移植性问题。当然,终结函数也有其可用之处,我们将在本条目的最后再做介绍;但是根据经验,应该避免使用终结函数。 C++的程序员被告知"不要把终结函数当作是...

2013-07-30 22:53:35

阅读数 2425

评论数 0

Effective Java 第6条:消除过期的对象引用

当你从手工管理内存的语言(比如C或C++)转换到具有垃圾回收功能的语言的时候,程序员的工作会变得更加容易,因为当你用完了对象之后,它们会被自动回收。当你第一次经历对象回收功能的时候,会觉得这简直有点不可思议。这很容易给你留下这样的印象,认为自己不再需要考虑内存管理的事情了。其实不然。 考虑下...

2013-07-30 22:29:44

阅读数 2509

评论数 0

Effective Java 第5条:避免创建不必要的对象

一般来说,最好是重用对象而不是在每次需要的时候就创建一个相同功能的新对象。重用方式既更加快速,也更为流行。如果对象是不可变的(immutable)(见第15条),它就始终可以被重用。 作为一个极端的反面例子,考虑下面的语句: String s = new String("st...

2013-07-30 22:27:25

阅读数 2387

评论数 0

Effective Java 第4条:通过私有构造器强化不可实例化的能力

有时候,可能需要编写只包含静态方法和静态域的类。这些类的名声很不好,因为有些人滥用它们来避免从对象的角度进行思考,但是它们也确实有它们特有的用处。我们可以利用这种类,以java.lang.Math或者java.util.Arrays的方式,把基本类型的值或者数组类型上的相关方法组织起来。我们也可以...

2013-07-28 22:57:59

阅读数 2129

评论数 0

EffectiveJava 第3条 :用私有构造器或者枚举类型强化Singleton属性

Singleton只不过是指仅仅实例化一次的类[Gamma95, p. 127]。Singleton通常被用来代表那些本质上唯一的系统组件,比如窗口管理器或者文件系统。使类成为Singleton会使它的客户端测试变得十分困难,因为无法给Singleton替换模拟实现,除非它实现一个充当其类型的接口...

2013-07-28 17:37:05

阅读数 2227

评论数 0

EffectiveJava 第2条 :遇到多个构造器参数时要考虑用构建器(2)

转载地址: http://book.51cto.com/art/200901/106048.htm 幸运的是,还有第三种替代方法,既能保证像telescoping constructor模式那样的安全性,也能保证像JavaBeans模式那么好的的可读性。这就是Builder模式[Gamma95,p...

2013-07-25 23:37:17

阅读数 2277

评论数 0

EffectiveJava 第2条 :遇到多个构造器参数时要考虑用构建器(1)

转载地址: 静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。考虑用一个类表示包装食品外面显示的营养成份标签。这些标签中有几个域是必需的:每份的含量、每罐的含量以及每份的卡路里,还有超过20个可选域:总脂肪量、饱和脂肪量、转化脂肪、胆固醇、钠等等。大多数产品都只有几个可选域...

2013-07-25 23:31:47

阅读数 2332

评论数 0

提示
确定要删除当前文章?
取消 删除