static型的变量或者方法叫做类变量和类方法
类变量是在该类加载到内存的同时就进行初始化的
而非static变量是在产生实例时进行初始化因为要执行一个static方法main(),因此要先把该类加载到内存并同时进行static变量的初始化因此static Bowl bl = new Bowl(1);要在main函数开始执行之前就执行了

解决方案 »

  1.   

    建议楼主去看Thinking in Java 2nd的第四章
      

  2.   

    你可以去看一下你编译StaticInitialization.java的class目录,会发现虽然你编译的只是一个.java文件,但由于你的java文件里声明了4个class,所以实际由这个java文件产生了4个class文件。
    下面,你看是运行StaticInitialization.class,此时系统只载入这个类,其它三个类还没有载入,而在StaticInitialization.class有两句static语句,于是系统开始寻找这两句语句指定的类Table 和 Cupboard ,找到了开始载入,所以载入就发生了,自然也就开始初始化这两个类中的static。谢谢