关于第一个问题,你在类的构造函数前加了private私有化后是不能在被其他类new 对象的,而去掉private后可以编译通过,
但是运行后应该是内存出错,创建了A的对象,A又创建B的对象,都互相调用了,下面是打印的结果at B.<init>(Test.java:17)
at A.<init>(Test.java:12)
at B.<init>(Test.java:17)
at A.<init>(Test.java:12)
。。。。。。。。
至于第二个问题,可将主函数的内容一句一句的运行,看打印结果
class Test
{
public static void main(String[] args)
{
B b = B.getInstance();
//b.test();
//System.out.println("==========");
//A a = A.getInstance();
//a.test();
}
}
将后面几句话注释后结果为
B被调用
A被调用
B被调用
class Test
{
public static void main(String[] args)
{
//B b = B.getInstance();
//b.test();
//System.out.println("==========");
A a = A.getInstance();
//a.test();
}
}
将前面几句话注释掉后打印结果为
A被调用
B被调用
A被调用
由此可见运行B b = B.getInstance()与A a = A.getInstance() A类与B类都会双方调用一次分别产生a的对象与b对象,
当内存中有了a与b对象后就不会产生新的对象了,因为对象是唯一的,所以A a = A.getInstance()只调用了不会产生新的对象了,我花了不少时间还没完全搞懂,这个问题挺复杂的。 |