class A {
 int a=b;
 int b;
}会出现前向引用错误,为什么呢?
根据Thinking in JAVA的说法,初始化顺序是先将对象所有基本类型设成默认的,然后开始字段定义处的初始化,然后构造方法在上面那个例子里,由于对象的所有基本类型已经是默认的(a,b此时都是0),然后在进行字段定义处的初始化a=b时,b这时候的值是0,应该是可以赋值给a的,为什么不行呢?谢谢~

解决方案 »

  1.   

    顶楼上两位大大!
    ps:楼主的id:ultrasurf --------- 无界? 哈哈
      

  2.   

    如果b没定义应该输出的错误是 b没定义 才对,而不是 前向引用错误TIJ上说 先将对象所有基本类型设成默认的 , 我觉得这已经算初始化了
    如果把a=b改成调用下面的函数int a=fun()
    int b;int fun()
    { return b; }此时返回的是b默认的0. 但如果是int a=fun(b)
    int b;int fun(int b)
    { return 10; }就不行,还是前向引用错误...只要a=后面有b的都不行我猜是不是为了和局部变量统一有关系?因为局部变量是不会自动设成默认的,这么设计对于局部变量还是可以理解的
      

  3.   

    我提醒一下,这个是编译错误。编译器到了第一行,发现后面还需要b,可是找不到b, 所以错误了在C里面好像有这种用法,但需要在前面声明一下,通知编译器这个变量在后面声明。
      

  4.   

    java是强类型语言,在 int a = b;的时候,还没有能够确认b的类型.所以,给出了错了提示.