Java-无法为最终变量赋值

时间:2018-09-05 06:21:51

标签: java static final

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类型。

3 个答案:

答案 0 :(得分:2)

您必须了解temp变量的两个修饰符:

  1. static意味着使它成为 class 变量,因此当您在对象构造函数中进行赋值时,它不是对象的成员,而是类的成员。在创建t2时,您对一个唯一的类变量(而不是对象的成员变量)进行了第二次赋值。

  2. final意味着该变量只能分配一次值,因此t2的构造中的分配失败。

您打算让temp成为对象的成员字段吗?然后删除static

如果您打算让temp是重新分配的类变量?然后删除final

答案 1 :(得分:1)

static表示属于班级。而且,final意味着您只能实例化一次。因此,当您使用final static时,创建t1时会将其实例化一次。然后,无法重新初始化。参见此article

如果您想拥有一个不能在对象级别更改的变量,请删除static

答案 2 :(得分:1)

定义变量final static时,意味着将其定义为CONSTANT。仅存在一个变量副本,无法重新初始化。