将值分配给静态最终变量

时间:2012-05-19 05:37:10

标签: java static

public class A{
    public static final int j;
    public static int x; 
    static{ 
         j=9; 
    }
    public A(int j)
    {
         j = j;
    }
    protected void print()
    {
           System.out.println(j);
    }
}

当在eclipse中尝试上面的代码时,eclipse显示“对变量j的赋值没有效果”显示为在构造函数中初始化可变“j”。

请告诉我为什么变量j没有效果。

6 个答案:

答案 0 :(得分:6)

参数j shadowing 类成员j。尝试按如下方式更改代码:

public A(int j)
{
     A.j = j;
}

答案 1 :(得分:4)

类变量j(static final int j)在静态块中被赋值为9。这都是有效的。

在构造函数中,参数j被赋给自身并且没有效果。另一种选择(我怀疑你的意思)是:

public A(int j)
{
     A.j = j;
}

这里将参数j分配给类变量j。但是,Java会在这里抱怨,因为类变量是最终的。如果删除final关键字,这当然也会起作用。然而,现在它变得有趣:

只要没有创建A类实例,类j的值就是9。当通过new运算符创建类的实例时,类A的所有实例将具有类变量j的相同值(取决于您发送构造函数的内容)。

答案 2 :(得分:3)

为自己分配变量具有无效的净值。

答案 3 :(得分:0)

因为final变量只能赋值一次,这意味着在执行static变量的JVM期间执行一次,而每次创建对象时都会执行构造函数。

答案 4 :(得分:0)

您可能希望阅读this。它表示在某些情况下,生成的警告不正确,就像您的情况一样。

答案 5 :(得分:0)

请使用this.j = j;

使用j = j时,两个“j”是相同的,只是构造函数的参数,但不是A类的字段。如果你想要字段j为A,请使用{{1 }}