关于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赋值,问题就来了:
你声明是不可变的,现在又来改变它,这就冲突了.