开发者社区> 问答> 正文

java报错非法的前向引用问题

screenshot
在静态代码块中已经初始化过了, 为什么还是会报错说非法的前向引用, 这是为什么呢?

展开
收起
蛮大人123 2016-02-28 13:51:15 4129 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    只有在全部满足以下4点的情况下,成员变量的声明才必须在使用之前,否则顺序无关
    •使用出现在C的实例/静态变量初始化,或者C的实例/静态初始化块中 (题中a.printA()出现在静态初始化块中,满足)
    •使用不在赋值表达式左边 (题中a.printA()非赋值表达式,也即不在赋值表达式左边,满足)
    •使用是通过简单名称 (题中a.printA()不带类名,满足)
    •C是包含该使用的直接类/接口 (C即为题中CC,满足)
    简单来说, 在static BB a = new BB();声明之前的static initialization block中使用,只能出现在复制表达式左边,除非带上类名(fully qualified)
    改法1:

    static BB a = new BB() ;
    static
    {
        a = new BB() ;
        a.printA() ;
    }

    改法2:

    static
    {
        a = new BB() ;
        CC.a.printA() ;
    }
    static BB a = new BB() ;
    2019-07-17 18:49:32
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载