- 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 为了对变量先进行初始化再使用,以保证安全性而定义的规则吧。
小弟才疏学浅,请各位大神指教。谢谢。
|