说明原因 为什么只有一个hi输出,可以从内存角度,以及对象引用的角度,尽可能详细吧。class Seem{
static{
System.out.println("hi");
}
}
public class Palo { /**
 * @param args
 */
public static void main(String[] args) {
Seem s1 = new Seem();
Seem s2 = new Seem();
Seem s3 = new Seem(); }}

解决方案 »

  1.   

    Seem s1 = new Seem();
    该语句执行时,类静态代码块被执行一次
    Seem s2 = new Seem();
    Seem s3 = new Seem();
    执行上面两个时,静态代码归属类所有,不依赖对象,所以不再执行
      

  2.   

    在执行
    Seem s1 = new Seem();
    这段代码的时候,发现Seam还没有在内存中,所以类加载器负责在环境变量中查找Seam,并把它加载到相应的内存块,同时执行static域中的代码。
    等到s2,s3被创建时,因为Seam已经在内存中了,所以没有必要再执行static域中的代码了。
    简单的理解为,static是属于类的,而不是属于某个特定对象的