【问题标题】:How to create single instance of class and use it multiple times? [duplicate]如何创建类的单个实例并多次使用它? [复制]
【发布时间】:2018-03-26 08:12:18
【问题描述】:

我正在创建一个 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;
}

【问题讨论】:

标签: java oop object memory instance


【解决方案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) 如果您想在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 字段分配单个分配。

【讨论】:

  • 您可以创建不同的实例来共享相同的数据。显然,单个int 毫无意义,但想象一下它是一个巨大的int[]。这可以在构造函数中传递,因此两个不同的实例将有效地“共享内存”。
  • @lexicore 当然它是有效的。如果该字段在所有实例之间共享,则使用 static 也是一种选择。
【解决方案2】:

这应该回答你的问题:

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

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

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多