附:关于这句话的背景 
http://blog.csdn.net/yaerfeng/article/details/7294882

解决方案 »

  1.   

    final说明是 这个一个已经是终极的了,不可能在改变了, private说明只能这个类使用,
    至于你说的 static完全存在 子类和父类重名的 static变量和static方法,这个必须在具体调用的时候指定到底是 调用的是子类的还是父类的,所以说这个是不安全的,估计 think in java说的安全就是  不存在二义性 
      

  2.   

    应该是说的保证对象安全发布的问题,涉及到Java内存模型和重排序。
      

  3.   

    的确会存在子类和父类重名的static变量或static方法。但是static方法是和对象无关的,和类有关,所有think in java 书上说:
    ”static和final 方法同样不会动态绑定。“ 因此我觉得调用static方法时,不需要考虑是子类或父类的,在哪个类中调用,就是谁的static方法。 
    按照书上”static和final 方法同样不会动态绑定。“这句话,我觉得static应该和final是一样对待的。 
      

  4.   

    Java内存模型和重排序
    求详细点说
      

  5.   

    他说的是  构造器。的确会存在子类和父类重名的static变量或static方法。但是static方法是和对象无关的,和类有关,所有think in java 书上说:
    ”static和final 方法同样不会动态绑定。“ 因此我觉得调用static方法时,不需要考虑是子类或父类的,在哪个类中调用,就是谁的static方法。 
    按照书上”static和final 方法同样不会动态绑定。“这句话,我觉得static应该和final是一样对待的。 个人感觉还是为了 避免二义性,虽然现在找不到证据
      

  6.   

    假设有如下构造函数
    public Test(){
    ...
    object.a = 1;
    object.b = 2;
    function(this);
    ...
    }
    考虑多线程的情况,如果构造器中调用了一个public方法如上面的function,把正在构造的对象传递进去,由于重排序的原因,function(this);可能在object.b=2;之前执行,这时对象还没有完全构造。而且方法是公共的,我们无法确定方法之中会对对象进行什么操作,因此会存在风险。当然,至于作者是不是这个意思,楼主再看一下上下文,仔细推敲一下。