本帖最后由 王程 于 2012-8-11 12:49 编辑
class StaticCode {
static {
System.out.println("a");
}
}
class TestStatic {
public static void main(String[] args) {
new StaticCode();
new StaticCode();
}
}
当执行程序的入口main方法开始后, 执行new StaticCode(),JVM先要查看StaticCode这个类是不是已经加载到内存中,如果还没有加载到内存中,则要去查找到这个类,并把它加载到内存中,如果已经加载到内存中,则直接调用这个类。加载StaticCode这个类时,因为有静态代码块,所以会把静态代码块的内容在方法区中,并执行一次其中的代码。然后才new一个StaticCode对象,并把这个对象存放在堆内存中。
个人理解,应该是这个样子。
|