日期:2014-05-20  浏览次数:20703 次

关于final static 和 final 的区别
在类中定义常量 
final static int P
和 final int P 有什么区别?  (static 声明为类的所有对象共享,这一点,我也明白)

如果对在类体中将 声明和赋值分开

eg.
    class A {
      final static int P;
      public A() {
        P = 1;
      }
    }
为什么这个编译不能通过?
但是 如果将static 删去

class A {
      final int P;
      public A() {
        P = 1;
      }
    }
却能编译通过?为什么会这样?

------解决方案--------------------
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制: 
·  
它们仅能调用其他的static 方法。  
·  
它们只能访问static数据。  
·  
------解决方案--------------------
final 它就是说这个变量不可以变了.
static是在定义了类的成员变量.static级别的,它和类是同一个级别的,编译的优先级比构造函数高.

你是构造函数中,重新给p赋值,问题就来了:
你声明是不可变的,现在又来改变它,这就冲突了.