黑马程序员技术交流社区
标题:
遇到一个有意思的东东——非法前向引用
[打印本页]
作者:
samove
时间:
2015-6-30 21:55
标题:
遇到一个有意思的东东——非法前向引用
class Test
{
public static void main(String[] args)
{
Demo d = new Demo();
}
}
class Demo
{
{
x = 2;
// System.out.println("x="+x); //标记★
}
int x = 1; //标记▲
public Demo()
{
System.out.println("x="+x);
}
}
复制代码
以上代码,正常运行,最后print输出的是 x = 1 。说明先运行代码块里面赋值 → x = 2,最后运行 标记▲ 处的赋值 x = 1;
第一步:如果把 标记★ 处的代码取消注释运行,会提示:"非法前向引用”;
第二步:如果再把 标记▲ 处的代码注释掉运行,会提示:“找不到符号”;
第三步:如果在第一步的基础上,把 标记▲ 处的代码移动到代码块前面,程序能正常运行,而且最后输出的是 x = 2。
此时说明:在上面正常运行时,程序运行到代码块中,有先访问到 标记▲ 处声明的int类型的 x 变量,然后对变量进行赋值(因为变量要先声明才能使用)。
而第一步与第二步比较,可以发现,当程序运行到代码块中时,是有先寻找变量 x 是否有被声明。第一步中,在代码块后面找到对 x 变量的声明,所以提示:"非法前向引用”。
写的不是很清晰,但大概也就是这意思吧 ^_^ 虽然,"非法前向引用”不是太明白是什么意思,但也许大概可能就是 java 为了对变量先进行初始化再使用,以保证安全性而定义的规则吧。
小弟才疏学浅,请各位大神指教。谢谢。
作者:
1014914737
时间:
2015-6-30 22:23
大哥给我黑马币
作者:
098ASD
时间:
2015-7-4 22:50
哈哈,研究的很细呀!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2