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

时间:2017-10-14 08:50:18

标签: java oop object memory instance

我正在创建Box类的对象(bb)并将25存储到其属性值。该对象将被创建,它将有内存。现在我想创建Box类的新实例,但我希望它将它指向为bb创建的同一个对象,而不是再次为它分配新内存。例如,如果写入盒子cc新框();并打印出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;
}

2 个答案:

答案 0 :(得分:2)

这应该回答你的问题:

Box box = new box(25);
Box box2 = box;

由于box2不是新对象,因此它将引用为在内存中创建的第一个对象。

答案 1 :(得分:1)

  

现在我想创建Box类的新实例,但我不想这样做   为它分配新的内存,我想实例化同一个对象   为bb创建

没有意义。
实例化一个新对象,并在内存中分配一个新对象,通过将同一个对象分配给多个变量来重用同一个对象。

1)如果要创建不超过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)如果您希望在value的所有实例之间共享一个Box字段,请将此字段设为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字段分配一个分配。