如何创建一个类的单个实例并多次使用它?
问题描述:
我正在创建Box类的一个对象(bb),并将其存储到其属性值为25。该对象将被创建并且它将具有内存。现在,我想要创建Box类的新实例,但是我希望它将其指向为bb创建的同一对象,而不是再次分配新内存。例如,如果写入Box cc new框();并打印出cc.value它应该打印25.它不应该分配新的内存。这是每次我们创建对象时它应该参考bb。例如Box newOne = new Box(); newone.value应该给我们25.这可能吗?我不知道我是否很好地描述了这个问题。我最近在考试中遇到了这种类型的问题。如何创建一个类的单个实例并多次使用它?
Box bb = new Box();
bb.value = 25;
Box cc = new Box();//It should not allocate new memory it should refer to
//the previous memory that we used for bb.
System.out.println(cc.value);//It should give us 25
class Box{
int value;
}
答
这应该回答你的问题:
Box box = new box(25);
Box box2 = box;
由于BOX2是不是一个新的对象,它会参考在内存中创建的第一个。
答
现在我想创建Box类的新实例,但我不想 分配新的内存给它,我想instatiate对于BB
这是没有意义的创建同一个对象 。
要么你实例化一个新的对象,并在内存中或您通过分配相同的对象,以多个变量重复使用相同的对象分配一个新的对象。
1)如果你想创建不多于Box
的实例,你可以使用单例模式。
public class Box{
private Box box = new Box();
public int value;
private Box(){
}
public static Box of(){
return box;
}
}
并以这种方式使用它:
Box bb = Box.of();
bb.value = 25;
Box cc = Box.of();
System.out.println(cc.value);
2)如果你想拥有的Box
所有实例之间共享的单一value
领域,使这一领域static
:
public class Box{
public static int value;
...
}
并以这种方式使用它:
Box bb = new Box();
bb.value = 25;
Box cc = new Box();
System.out.println(cc.value);
它不会避免创建Box
的多个实例,但它会为int value
字段分配一个分配。
它被称为'Singleton Pattern'。你可以看看这个问题的更多信息:https://stackoverflow.com/questions/70689/what-is-an-efficient-way-to-implement-a-singleton-pattern-in-java – endertunc
使值属性static(即:'static int value;') – davidchoo12