Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建类的单个实例并多次使用它?_Java_Oop_Object_Memory_Instance - Fatal编程技术网

Java 如何创建类的单个实例并多次使用它?

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),并将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也是一个选项。