只有在全部满足以下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() ;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。