Java无法为最终变量赋值
当我创建某个类的对象t2时,我不能给它赋值20。这里的原因是什么?我无法理解最终的静态int类型Java无法为最终变量赋值,java,static,final,Java,Static,Final,当我创建某个类的对象t2时,我不能给它赋值20。这里的原因是什么?我无法理解最终的静态int类型 静态表示属于类级别。而且,final意味着您只能实例化它一次。因此,当您使用final static时,在创建t1时只需实例化一次。然后,就无法重新初始化。看这个 如果希望有一个在对象级别无法更改的变量,请在定义变量final static时删除static,这意味着您将其定义为常量。只有一个变量副本无法重新初始化。您必须了解temp变量的两个修饰符: static表示将其作为类变量,因此在对象构造
静态
表示属于类级别。而且,final
意味着您只能实例化它一次。因此,当您使用final static
时,在创建t1时只需实例化一次。然后,就无法重新初始化。看这个
如果希望有一个在对象级别无法更改的变量,请在定义变量final static时删除
static
,这意味着您将其定义为常量。只有一个变量副本无法重新初始化。您必须了解temp
变量的两个修饰符:
static
表示将其作为类变量,因此在对象构造函数中赋值时,它不是对象的成员,而是类的成员。在创建t2
时,对唯一的类变量(不是对象的成员变量)进行第二次赋值final
表示变量只能赋值一次,因此构建t2
时赋值失败temp
成为对象的成员字段?然后移除静态
如果打算将
temp
作为重新分配的类变量?然后删除final
final意味着不能分配新值,它就像一个常量。因为您刚刚定义为final,这意味着您可以在初始化时分配变量。也许您需要的是一个非静态变量?@Jens此外,您必须为它分配一个初始值:它不能不初始化。就目前而言,这段代码不会编译,因为这是事实。@AndyTurner告诉它OP而不是我,我知道最后一个变量是hanks!!我现在明白了。
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);
}
}