class SomeClass{
final static int temp;
//temp=30;
SomeClass(int a){
System.out.println("here");
temp=a;
}
}
public class HelloWorld{
public static void main(String args[]){
SomeClass t1 = new SomeClass(10);
SomeClass t2 = new SomeClass(20);
System.out.println("t1:"+t1.temp);
System.out.println("t2:"+t2.temp);
}
}
当我创建SomeClass的对象t2时,无法为其分配值20。这可能是什么原因?我无法理解最终的静态int类型。
答案 0 :(得分:2)
您必须了解temp
变量的两个修饰符:
static
意味着使它成为 class 变量,因此当您在对象构造函数中进行赋值时,它不是对象的成员,而是类的成员。在创建t2
时,您对一个唯一的类变量(而不是对象的成员变量)进行了第二次赋值。
final
意味着该变量只能分配一次值,因此t2
的构造中的分配失败。
您打算让temp
成为对象的成员字段吗?然后删除static
。
如果您打算让temp
是重新分配的类变量?然后删除final
。
答案 1 :(得分:1)
static
表示属于班级。而且,final
意味着您只能实例化一次。因此,当您使用final static
时,创建t1时会将其实例化一次。然后,无法重新初始化。参见此article。
如果您想拥有一个不能在对象级别更改的变量,请删除static
。
答案 2 :(得分:1)
定义变量final static时,意味着将其定义为CONSTANT。仅存在一个变量副本,无法重新初始化。