发布定义:
指一个对象可以在对象的作用域范围以外使用。
溢出定义:
当某个不应该发布的对象被发布时称为溢出。
最常见的案例是将对象的引用保存在共有的静态变量之中
for example:
public static set<Secrect> sets;
public void init(){
this.sets=new HashSet<Secrect>();
}
这个时候当发布Secrect对象时,其实会间接发布sets对象。因为任何代码都可以遍历这个sets对象并获取到新发布的secrect对象。
再看一个案例:
public class unsafeClass{
private String[] states=new String[]{"a","b"};
public String[] getState(){
return states;
}
如果按照上述方式发布states就会出现问题,因为任何调用者都可以修改states内容;这个时候其实states已经溢出了它所在的作用域,这个本应是私有的变量被发布了
}