解决方案 »

  1.   

    类被第一次使用时才会执行类静态成员初始化,而类静态成员初始化时,先执行静态初始化字段,再执行静态构造函数。Main函数因为是入口函数被宿主进程调用,由于Main是B的静态成员则按规则在调用前先初始化静态字段,也就是先执行Y = A.X + 1, 在计算表达式过程中需要用到A.X,执行点被转移到对A的静态成员初始化,A没有需要静态初始化的字段,就直接执行静态构造函数的X = B.Y + 1,B.Y还未完成初始化根据语言特性默认为0,此时X被初始化为1,然后Y就马上被初始化为2。
      

  2.   

    看了程序后觉得是x=1 y=0,但没什么信心,运行后果真如此构造类的实例时会先执行其基类的构造函数,再执行自己的,所以PrintFields()时y还未赋为-1,声明int y时y就是默认值0PS:
    B b = new B(); 很别扭,“new B”......