《Effective Java 2nd》第4章 类和接口

目录

第4章 类和接口

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

尽可能使每个类或者成员不被外界访问。提供尽可能小的访问级别。

final维持字段不可变性,字段要么是基本类型的、要么是指向不可变对象的引用。

如果final包含可变对象的引用,虽然引用不能被修改,但是引用对象的内部却可以被修改。

注意:长度非0的数组总是可变的。

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

第15条:使可变性最小化

讲了不可变类的相关内容。

不可变类:实例不能被修改的类。实例化后,实例中包含的内部信息在整个生命周期中固定不变。

如何使类不可变

1)不提供任何修改对象状态的方法

2)保证类不会被扩展。如将类声明为final

3)使所有的域都是final的

4)所有的域都是私有的

5)对任何可变域(指指向可变对象的域),使用保护性拷贝技术

不可变对象的好处:线程安全,可以自由共享

不可变类的唯一缺点:每个不同的值都要有一个单独的对象,比如String s = ”aaa", String s2 = "bbb"。

因不可变类的缺点,可以提供一个可变配套类,比如对String来说有StringBuilder

第16条:复合优先于继承

这里的继承指的是一个类扩展另一个类的时候,不含接口继承(类实现接口、接口实现接口)。

只有当两个类A和B,两者之间确实存在is a关系的时候,才适合用继承。问自己:每个B都是A吗?

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

第18条:接口优先于抽象类

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/yeyang/p/10461301.html