A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Demo d = new Demo();
  6.         }
  7. }

  8. class Demo
  9. {


  10.         {
  11.                 x = 2;
  12.         //        System.out.println("x="+x);  //标记★
  13.         }

  14.         int x = 1;                //标记▲

  15.         public Demo()
  16.         {
  17.                 System.out.println("x="+x);
  18.         }

  19. }
复制代码
以上代码,正常运行,最后print输出的是 x = 1 。说明先运行代码块里面赋值 → x = 2,最后运行 标记▲ 处的赋值 x = 1;

第一步:如果把 标记★ 处的代码取消注释运行,会提示:"非法前向引用”;
第二步:如果再把         标记▲ 处的代码注释掉运行,会提示:“找不到符号”;
第三步:如果在第一步的基础上,把 标记▲ 处的代码移动到代码块前面,程序能正常运行,而且最后输出的是 x = 2。
此时说明:在上面正常运行时,程序运行到代码块中,有先访问到 标记▲ 处声明的int类型的 x 变量,然后对变量进行赋值(因为变量要先声明才能使用)。
而第一步与第二步比较,可以发现,当程序运行到代码块中时,是有先寻找变量 x 是否有被声明。第一步中,在代码块后面找到对 x 变量的声明,所以提示:"非法前向引用”。
写的不是很清晰,但大概也就是这意思吧   ^_^  虽然,"非法前向引用”不是太明白是什么意思,但也许大概可能就是 java 为了对变量先进行初始化再使用,以保证安全性而定义的规则吧。
小弟才疏学浅,请各位大神指教。谢谢。

评分

参与人数 1黑马币 +1 收起 理由
1014914737 + 1 很给力!

查看全部评分

2 个回复

倒序浏览
大哥给我黑马币
回复 使用道具 举报
哈哈,研究的很细呀!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马