-1

我能够为静态变量赋值,但无法在同一个静态块中打印出来。

如果我将静态变量移到静态块上方,那么一切正常。现在我没有遵循代码的执行顺序。代码是在java中运行的。

class ExampleStatic{

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

public static void main(String[] args) {    
}
}

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

4

3 回答 3

1

只需更改cokePrice变量的位置。

static int cokePrice;

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

而且这种情况不仅仅发生在 .java 中System.out.print,问题在于 Java 中的限制。它允许在静态方法中使用变量而不对其进行初始化,除非您将其用作右手赋值。如果您将其用作左手分配,则它是安全的。

static int cokePrice;

static {
cokePrice=12; 
int x = cokePrice;   
}

static int cokePrice;

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

于 2019-02-13T07:41:16.563 回答
0

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

`class A {
    static {
        int c = 10;
        System.out.print(c);
    }
}`
于 2019-02-13T08:00:16.940 回答
0

这是因为“非法前向引用”

意味着您试图在定义变量之前使用它。

尝试这个

 static int cokePrice;
    static {
        cokePrice=12;
        System.out.println("Coke Price is: R"+cokePrice);
    }
于 2019-02-13T07:44:15.167 回答