可以分配静态变量,但不能在静态初始化程序中将其打印出来

时间:2019-02-13 07:34:49

标签: 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) {    
}
}

我希望打印可乐价格的输出是:R12。但是,错误提示:在定义字段之前无法引用该字段。

3 个答案:

答案 0 :(得分:1)

只需更改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;

这也会产生错误,因为我们将其用作右手分配。为了安全起见,请在静态块之前初始化变量,或者不要将其用作右手赋值。我希望这可以澄清您的想法。

答案 1 :(得分:0)

这是因为“非法转发参考”

表示您在定义变量之前尝试使用它。

尝试

 static int cokePrice;
    static {
        cokePrice=12;
        System.out.println("Coke Price is: R"+cokePrice);
    }

答案 2 :(得分:0)

您需要将静态块内的变量声明为局部变量。 像这样的东西

nvm.sh