问题描述
需要在一个单例模式类里初始化另外一个类,只是让另外一个类初始化,不做任何操作,请问用new方式而不赋给另外一个值,会不会造成单例模式类永久持有新new的类?大家只需要初始化一个类而不用操作都是怎么做的呢?谢谢啦!public class TestA { private static Test instance; private TestA { [color=red]new TestB(); //这里[/color] } public static TestA getInstance() { if(instance == null) { instance = new TestA(); } return instance; }}class TestB { public TestB { //blablabla }} 问题补充:地狱牢笼 写道
解决方案
引用只是要通过类B初始化一些环境如果你只是想通过new testB() 来初始化一些所谓的环境变量(这个变量最好不是在b中的,而是在系统中的)那是可以的,但是单例类并不会持有改对象。
解决方案二:
那你把那些赋值写到static 方法,这边调一下不就行了。
解决方案三:
public class TestA { private static final Test instance=new TestA(); private TestA { new TestB(); // 单例类不会持有新new的类 } public static TestA getInstance() { return instance; } }
解决方案四:
“需要类B初始化一些环境,并不需要对它操作。” 那更不明白了。new 能初始化B。但是你又想在内存中B对象不要一直存在?而B的环境存在?不知道是不是?
解决方案五:
这个是有问题的,引用private TestA { new TestB(); //这里[/color] } 这里是一个匿名变量,这句执行完之后该对象即被垃圾回收了,可以这个样子:private static TestB testB = new TestB(); 这样就可以永久持有了。
解决方案六:
不操作模拟初始化做什么。申明不就行了。等到要操作的时候再初始化。