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没有效果。
答案 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 }}