黑马程序员技术交流社区
标题:
static的问题
[打印本页]
作者:
王龙彪
时间:
2012-8-6 00:28
标题:
static的问题
package cn.heima;
class A {
private static A a = new A();
private B b = B.getInstance();
private A() {
}
public static A getInstance() {
System.out.println("A.getInstance返回的a是:" + a);
return a;
}
public void test() {
System.out.println("A中test:a = "+ a);
System.out.println("A中test:b = "+ b);
}
}
class B {
private static B b = new B();
private A a = A.getInstance();
private B() {
}
public static B getInstance() {
System.out.println("B.getInstance返回的b是:" + b);
return b;
}
public void test() {
System.out.println("B中test:a = " + a);
System.out.println("B中test:b = " + b);
}
}
class Test {
public static void main(String[] args) {
A testa = A.getInstance();
B testb = B.getInstance();
System.out.println("==========");
testa.test();
testb.test();
}
}
复制代码
打印结果是:
A.getInstance返回的a是:null
B.getInstance返回的b是:cn.heima.B@1fb8ee3
A.getInstance返回的a是:cn.heima.A@61de33
B.getInstance返回的b是:cn.heima.B@1fb8ee3
==========
A中test:a = cn.heima.A@61de33
A中test:b = cn.heima.B@1fb8ee3
B中test:a = null
B中test:b = cn.heima.B@1fb8ee3
问题是那个a 为什么是null 呢
作者:
牛杨
时间:
2012-8-6 01:17
标题:
RE: static的问题
这是一个关于两个类的两个对象相互指向 和类的初始化顺序的问题。
当执行A testa = A.getInstance();时,先加载类A 执行A中静态成员a 先赋值为null(因为这时还没有执行到A的构造函数的),然后执行private B b = B.getInstance(); 。同理A的情况初始化B类。
是B中的 b为null ,当执行到B类中的private A a = A.getInstance();就打印了A.getInstance返回的a是:null ,并使B中的a为null(这里是为了说更清楚点,其实A类中的a和B中的a是一个对象实例)。
然后继续初始化B类执行B的构造函数。把B初始化完后,再执行了B中的getInstance方法,就打印了第二句。
再继续初始化A类(执行A的构造函数) 之后调用了A中的getInstance方法,从而打印了第三句。
而第四句是因为执行了主函数中的B testb = B.getInstance();而打印的。
我个人认为这个程序主要考察的是类的初始化顺序的知识,但是又使这两个类个相互指向了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2