[Effective Java 读书笔记] 第三章类和接口 第十三 -- 十四条

时间:2023-03-10 06:51:47
[Effective Java 读书笔记] 第三章类和接口 第十三 -- 十四条

第十三条 使类和成员的可访问性最小化

  总得来说,我们应该尽量将成员的访问范围限制到最小!有利于解耦,开发、测试和优化都能够更加独立。

  对于成员(域,方法,嵌套类和嵌套接口),有四种可能的访问级别,访问范围从小到大:

访问控制符 同类 同包子类  同包其它类 不同包子类 不同包其它类
public
protected ×
默认 × ×
private × × × ×

另外,JAVA中的常量是全局访问的,public static final Integer VALUES_INTEGER = new Integer(10);

上面的VALUES_INTEGER是不可更改的,而公有的静态final数组是可以更改的:

public class MainTestJava {

    public static final Integer MAX_NUM = new Integer(10);
public static final Integer[] MAX_NUM_A = {new Integer(10),new Integer(10),new Integer(10)};
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer ii = new Integer(11);
MAX_NUM_A[1] = ii;//没有错误,可以赋值
MAX_NUM = ii;//有错误,不能赋值 } }

所以可以使用public的static final方法来获取数组的clone,将MAX_NUM_A置为private,不可更改

第十四条 在公有类中使用访问呢方法而非公有域

对于public的类,尽量不要让成员变量为public,而应该使用方法来访问: 如果类可以在包外访问(public),就应该提供访问方法,以保留将来改变该类内部表示法的灵活性。如果暴露了他的数据域,以后想要改变是不可能的。

如果类是包级别私有的(private,default),或者是私有的嵌套类,可以考虑暴露它的数据域,因为这些数据被限制在包中,如果有必要,不改变包外的任何代码而只改变内部数据表示法也是可以的。