Java无法为最终变量赋值

Java无法为最终变量赋值,java,static,final,Java,Static,Final,当我创建某个类的对象t2时,我不能给它赋值20。这里的原因是什么?我无法理解最终的静态int类型 静态表示属于类级别。而且,final意味着您只能实例化它一次。因此,当您使用final static时,在创建t1时只需实例化一次。然后,就无法重新初始化。看这个 如果希望有一个在对象级别无法更改的变量,请在定义变量final static时删除static,这意味着您将其定义为常量。只有一个变量副本无法重新初始化。您必须了解temp变量的两个修饰符: static表示将其作为类变量,因此在对象构造

当我创建某个类的对象t2时,我不能给它赋值20。这里的原因是什么?我无法理解最终的静态int类型

静态
表示属于类级别。而且,
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);
        }   
    }