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。