关于向前引用的问题

Marburger Marburger 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

public class Test{
int count = 20 ;
{
count = 12;
}
public Test(){
System.out.println(count);
}
public static void main(String[] args) {
new Test();
}

}

这段代码输出是12;通过javap 可知编译器处理后的类 初始化快没了,count的定义也没有了指定的初始值,
对count的赋值被提取到了构造函数中。就如同下面的代码

public class Test{
int count;
public Test(){
count = 20;
count = 12;
System.out.println(count);
}
public static void main(String[] args) {
new Test();
}
}

我的问题是下面的代码为什么不会如同上面一样是等效的

public class Pro{
int count = age;
int age = 10;
{
count = 12;
}
public Pro(){
System.out.println(count);
}
public static void main(String[] args) {
new Pro();
}
}


public class Pro{
int count;
int age;
public Pro(){
count = age;
age = 10;
count = 12;
System.out.println(count);
}
public static void main(String[] args) {
new Pro();
}

}

第一段Pro编译提示向前引用的错误
第二段Pro正常,输出12
之前我还能理解第一段Pro是错的,但是今天看到上面的Test的例子,我又困惑了,
如果说Test那个例子编译器能把第一段Test代码处理后等效于第二段Test代码,
为什么第一段Pro代码不行
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
Marburger
Java SE 62,621 成员 307,251 内容