1.类、成员的访问性
1.1使类与成员的可访问性最小化
就是尽量使类和成员不被外界访问。
以下有四种访问级别:
1.private(私有):只有该成员的顶层类内部才可以访问这个成员
2.package-private(包级私有):该成员的包的内部的类都可以访问,为“缺省”的访问级别(就是不写访问级别时的默认的)
3.protected(受保护):该成员的类的子类都可以访问,内部类也都可以访问。
4.public(共有):任何地方都可以访问改成员
1.2要在共有类而非共有域中使用访问方法
也就是封装。(将类的属性访问级别设置private,使用getset方法访问,也就是把类的属性封装进了类中,调用时是直接调用类的方法,而不是直接调用属性)
public class test3{
private int year;
private String name;
public test3() {
}
public test3(int year, String name) {
this.year = year;
this.name = name;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
所以共有类的实例域决不能是共有的,因为共有的话,那么放弃了不可变的能力,线程是不安全的。
2.使可变性最小化
不可变类指其实例不能被修改的类。(不可变类更加容易使用实现、更加安全)
使类成为不可变,遵循的五条规则:
1.不要提供任何会修改对象状态的方法(也就是设值方法:set)
2.保证类不会被扩展:防止子类化修改,防止手段一般是声明类为final。
3.声明所有的域都是final:防止域被修改。
4.声明所有的域都是私有的:控制访问级别
5.确保对于任何可变组件的互斥访问:就是类里面有可变对象的域时,需确保无法指向这些对象的引用,且不能用这些对象的引用来初始化域。
不可变对象本质上是线程安全的,它们不要求同步。所以不可变对象可以被共享。