java - 非法转发引用java问题

标签 java

谁能解释一下这段代码有什么问题:

    public class Base {


    static {
        i = 1;
        System.out.println("[Base]after static init block i=" + i);// LINE 1
        System.out.println("*************************************");
        System.out.println();
    }
    static int i;



    public static void main(String[] args) {
        System.out.println(Base.i);
    }
}

如果我评论 LINE 1 - 一切正常,Base.main 方法打印“1”。
如果第 1 行 - 未注释,则会出现编译时错误:“非法前向引用”。
所以,正如我在静态初始化块中所理解的,我可以为 i 设置值,但不能读取。谁能解释一下为什么?

最佳答案

这是因为 restrictions on the use of Fields during Initialization .特别是,在声明它们的行之前的静态初始化块内使用静态字段只能在表达式的左侧(即赋值),除非它们是完全限定的(在您的情况下 Base.i)。 )。
例如:如果您插入 int j = i;紧随其后 i = 1;你会得到同样的错误。
解决问题的明显方法是声明 static int i;在静态初始化块之前。

关于java - 非法转发引用java问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14624919/

相关文章:

java - 使用 Lucene 分析器进行 QueryDSL 和 Hibernate 搜索

java - 如何使用扩展Activity实现onClicklistener的多个列表项点击

java - 字符串 - 为什么两种情况下都有不同的返回值

java - 使用对象模型作为参数启动 java 程序

java - 从 cmd 运行 mvn clean install 时出现 NoClassDefFoundError com/google/inject/Module

Java Node.appendNode 删除先前的元素

java - 比较 WSDL 中 xsd 中的属性值

java - 如何使用Java API正确访问Hadoop 3.2.1?

java - 在 java web 项目中显示图像

java - 连接被拒绝错误 Java/Linux