本帖最后由 usagoole 于 2012-02-24 21:54:18 编辑

解决方案 »

  1.   

        首先有一點你要明确的就是,java里面的静态变量初始化是有顺序的:自上而下的执行。所以你顺序不同将会出现不同的结果,这个没什么好大惊小怪的。。淡定;
         具体分析:程序一:你对象实例化在前,当调用构造方时发现var1++,就去找到这个var1属性(全局int属性默认值为0),现在Test对象存在于内存当中且var1=1,同样var2=1,再往下走发现var1就只是声明而没有再次赋值(因为var1经有值了,内存里分配空间了。没有初始化,不可以被引用),var1=1不变,而遇到var2=0时,var2重新赋值,var2=0,,,这就是改程序输出为:1   0的原因
         程序二:首先是var1声明(默认值为零),var2=0;对象实例化调用构造函数后var1=1,var2=1结果程序输出:1  1 就这么简单,,,,,了解了一些基本的底层原理,一些想不通的问题可能其实就是规定的,,推荐《Thinking  in java 4th》
      

  2.   

    似乎有点明白了,我去看看thinking in java 。谢谢