Java 如何创建类的单个实例并多次使用它?
我正在创建一个Box类的对象(bb),并将25存储到其属性值中。该对象将被创建,它将拥有内存。现在我想创建Box类的新实例,但我希望它指向为bb创建的同一个对象,而不是再次为其分配新内存。例如,如果write Box cc new Box();并打印出cc.value,它应该打印25。它不应该分配新内存。也就是说,每次我们创建对象时,它都应该引用bb。例如Box newOne=newbox();而newone.value应该给我们25。这可能吗?我不知道我是否已经很好地描述了这个问题。我最近在一次考试中遇到了这类问题Java 如何创建类的单个实例并多次使用它?,java,oop,object,memory,instance,Java,Oop,Object,Memory,Instance,我正在创建一个Box类的对象(bb),并将25存储到其属性值中。该对象将被创建,它将拥有内存。现在我想创建Box类的新实例,但我希望它指向为bb创建的同一个对象,而不是再次为其分配新内存。例如,如果write Box cc new Box();并打印出cc.value,它应该打印25。它不应该分配新内存。也就是说,每次我们创建对象时,它都应该引用bb。例如Box newOne=newbox();而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 box = new box(25);
Box box2 = box;
由于box2不是一个新对象,它将引用为内存中创建的第一个对象
现在我想创建Box类的新实例,但我不想这样做
给它分配新内存,我想恢复同一个对象
为bb创建
这毫无意义。或者实例化一个新对象,它在内存中分配一个新对象,或者通过将同一对象分配给多个变量来重用同一对象 1) 如果要创建不超过1个
框的实例,可以使用单例模式。
并以这种方式使用它:
Box bb = Box.of();
bb.value = 25;
Box cc = Box.of();
System.out.println(cc.value);
Box bb = new Box();
bb.value = 25;
Box cc = new Box();
System.out.println(cc.value);
2) 如果要在所有框的实例中共享单个值字段,请将此字段设置为静态:
public class Box{
public static int value;
...
}
并以这种方式使用它:
Box bb = Box.of();
bb.value = 25;
Box cc = Box.of();
System.out.println(cc.value);
Box bb = new Box();
bb.value = 25;
Box cc = new Box();
System.out.println(cc.value);
它不会避免创建多个框
实例,但会为int value
字段分配一个分配
现在我想创建Box类的新实例,但我不想这样做
给它分配新内存,我想恢复同一个对象
为bb创建
这毫无意义。
或者实例化一个新对象,它在内存中分配一个新对象,或者通过将同一对象分配给多个变量来重用同一对象
1) 如果要创建不超过1个框的实例,可以使用单例模式。
并以这种方式使用它:
Box bb = Box.of();
bb.value = 25;
Box cc = Box.of();
System.out.println(cc.value);
Box bb = new Box();
bb.value = 25;
Box cc = new Box();
System.out.println(cc.value);
2) 如果要在所有框的实例中共享单个值字段,请将此字段设置为静态:
public class Box{
public static int value;
...
}
并以这种方式使用它:
Box bb = Box.of();
bb.value = 25;
Box cc = Box.of();
System.out.println(cc.value);
Box bb = new Box();
bb.value = 25;
Box cc = new Box();
System.out.println(cc.value);
它不会避免创建框的多个实例,但会为int value
字段分配一个分配。它被称为单例模式。您可以查看这个问题以了解更多信息:将value属性设置为static(即:static int-value;
)它被称为Singleton模式
。您可以查看这个问题以了解更多信息:将value属性设置为static(即:static int-value;
),您可以创建不同的实例,这些实例可以共享相同的数据。显然,对于单个int
来说没有意义,但是想象一下它是一个巨大的int[]
。这可以在构造函数中传递,这样两个不同的实例将有效地“共享内存”。@lexicore确保它是有效的。如果该字段在所有实例之间共享,则使用静态也是一个选项。您可以创建可以共享相同数据的不同实例。显然,对于单个int
来说没有意义,但是想象一下它是一个巨大的int[]
。这可以在构造函数中传递,这样两个不同的实例将有效地“共享内存”。@lexicore确保它是有效的。如果该字段在所有实例之间共享,则使用static也是一个选项。