{
  Ststem.out.println(age); 1处 // cann't compile 
  age=22; 2处
}int age=21;
age 这个实例变量 在new的时候 初始化为缺省值(0)
为什么1处 会报illegal forward reference错误 而2处不会
age在已经{}块之前不是已经声明了
(不管实例域声明语句的实际位置在哪里都会先初始化为缺省值(0,null,false))这是Core2的说法
难道我理解错误了~~?

解决方案 »

  1.   

    Ststem是不是写错了,应该是System
      

  2.   

    完整代码
    class ForwardReference{{
      System.out.println(age); 1处 // cann't compile 
      age=22; 2处
    }
    int age=21;
    }age 这个实例变量 在new的时候 初始化为缺省值(0)
    为什么1处 会报illegal forward reference错误 
    而2处不会(居然不会也就是说已经程序里声明了这个变量age)
    age在已经{}块之前不是已经声明了
    (不管实例域声明语句的实际位置在哪里都会先初始化为缺省值(0,null,false))这是核心技术2的说法
    难道我理解错误了~~?
      

  3.   

    有2中解决方法:
       1.在 int age 修改为静态类型,才会编译通过,你那段初始化代码块会在构造方法执行前执行
       2.将 int age 变量放到初始化代码块前面
      

  4.   

    两种改法:class ForwardReference{
     int age=21;
     {
     System.out.println(age); 
     age=22; 
     }
    }class ForwardReference{
     
     {
     System.out.println(age); 
     age=22; 
     }
     static int age=21;
    }
      

  5.   

    无非就是让变量age在代码块之前先编译,这样就能避免编译错误了...