说明原因 为什么只有一个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(); }}
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(); }}
该语句执行时,类静态代码块被执行一次
Seem s2 = new Seem();
Seem s3 = new Seem();
执行上面两个时,静态代码归属类所有,不依赖对象,所以不再执行
Seem s1 = new Seem();
这段代码的时候,发现Seam还没有在内存中,所以类加载器负责在环境变量中查找Seam,并把它加载到相应的内存块,同时执行static域中的代码。
等到s2,s3被创建时,因为Seam已经在内存中了,所以没有必要再执行static域中的代码了。
简单的理解为,static是属于类的,而不是属于某个特定对象的