这个程序运行过程是这样的,首先在主函数中按顺序得执行B类中的程序,所以首先是“B被调用”而后的return b;返回到了A类中b的实例对象(private B b = B.getInstance(); ),所以就开始执行A类中的程序,所以第二行打印的是“A被调用”,而后的return a;返回到B类中a的实例对象(private A a = A.getInstance();),所以就执行b类则第三行打印的是“B被调用”,接着就开始执行B类中test方法,所以就打印了a的哈希值,这个程序的方法就出栈了,B类里的内存就释放掉了,按主函数的顺序第五航就打印了“=====”紧接着就执行A类中方法,所以第六行打印的就是“A被调用,然后执行return a,在这里用说明一下因为刚才B类执行完内存就已释放掉了,所以里面方法就会空了,当它返回给B类中a的实例对象,因为里面为空所以最后打印结果就是null。 |