jvm把java类初始化需要做哪些工作?
1.有两个类,A类为:
public class A {private static A a=new A();//必须要先初始化类private static B b=B.getInstance();private A(){}public static A getInstance(){System.out.println("A被调用了...."+a);return a;}public void test(){System.out.println("A类中的b:"+b);}}
?
B类为:
public class B {private static B b=new B();//必须要先初始化类private static A a=A.getInstance();private B(){}public static B getInstance(){System.out.println("B被调用了...."+b);return b;}public void test(){System.out.println("B类中的a:"+a);}}
?还有一个测试类C:
public class C {/** * @param args */public static void main(String[] args) {B b=B.getInstance();b.test();System.out.println("=====");B b1=B.getInstance();b1.test();System.out.println("=====");B b2=B.getInstance();b2.test();A a=A.getInstance();a.test();System.out.println("----------");A a1=A.getInstance();a1.test();}}
?总结:这是javaeye上看到的一个帖子http://hllvm.group.iteye.com/group/topic/25526,感觉这个问题很有意思,可以推敲一下。java类初始化的时候,jvm优先考虑静态成员变量的初始化,然后才是构造函数,所以刚开始以为这两个类的实例化是一个死循环,后来发现jvm对所有类只初始化一次,这样就不会出现死循环了。但是关于jvm到底怎么初始化类的过程,很让人着迷。网上看到一个不错的文章分享了http://www.webspherechina.net/?viewnews-51644.html。