Java 可以分配静态变量,但不能在静态初始值设定项中打印出来
我可以给静态变量赋值,但不能在同一个静态块中打印出来 如果我将静态变量移到静态块上方,则所有操作都正常。现在,我没有遵循代码的执行顺序。代码是用java运行的Java 可以分配静态变量,但不能在静态初始值设定项中打印出来,java,static-initializer,Java,Static Initializer,我可以给静态变量赋值,但不能在同一个静态块中打印出来 如果我将静态变量移到静态块上方,则所有操作都正常。现在,我没有遵循代码的执行顺序。代码是用java运行的 class ExampleStatic{ static { cokePrice=12; System.out.println("Coke Price is: R"+cokePrice); } static int cokePrice; public static void main(String[] args)
class ExampleStatic{
static {
cokePrice=12;
System.out.println("Coke Price is: R"+cokePrice);
}
static int cokePrice;
public static void main(String[] args) {
}
}
我希望打印焦炭价格的输出是:R12。但是,错误显示:在定义字段之前无法引用该字段 只需更改
cokePrice
变量的位置即可
static int cokePrice;
static {
cokePrice=12;
System.out.println("Coke Price is: R"+cokePrice);
}
这种情况不仅仅出现在System.out.print
上,问题在于java中的限制。它允许在静态方法中使用变量,而无需对其进行初始化,除非您将其用作右手赋值。如果你用它作为左手作业,它是安全的
static int cokePrice;
static {
cokePrice=12;
int x = cokePrice;
}
static int cokePrice;
这也会产生错误,因为我们将其用作右手赋值。为了安全起见,在静态块之前初始化变量,或者不要将其用作右手赋值。我希望这能澄清你的想法。这是因为“非法转发引用”
表示在定义变量之前尝试使用该变量
试试这个
static int cokePrice;
static {
cokePrice=12;
System.out.println("Coke Price is: R"+cokePrice);
}
您需要将静态块中的变量声明为局部变量。 像这样的东西
`class A {
static {
int c = 10;
System.out.print(c);
}
}`
您确定没有在赋值中得到错误吗?尝试在静态块之前定义变量。错误消息“无法在定义字段之前引用字段”中的确切内容您不明白吗?谢谢,这很有帮助。但是,请你(如果可能的话)解释一下为什么我在定义cokePrice之前可以指定cokePrice,但却无法打印出来。我为你编辑了这篇文章,希望这对你有所帮助。