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)

我可以给静态变量赋值,但不能在同一个静态块中打印出来

如果我将静态变量移到静态块上方,则所有操作都正常。现在,我没有遵循代码的执行顺序。代码是用java运行的

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,但却无法打印出来。我为你编辑了这篇文章,希望这对你有所帮助。