代码之家  ›  专栏  ›  技术社区  ›  Mahesh Gupta

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

  •  1
  • Mahesh Gupta  · 技术社区  · 7 年前

    我正在创建Box类的对象(bb)。并将25存储到其属性值。该对象将被创建,并具有内存。现在我想创建Box类的新实例,但我希望它指向为bb创建的同一个对象,而不是再次为其分配新内存。例如,如果write Box cc new Box();并打印出抄送。它应该打印25。它不应该分配新内存。也就是说,每次我们创建对象时,它都应该引用bb。例如,Box newOne=new Box();还有newone。值应该为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 回复  |  直到 7 年前
        1
  •  2
  •   davidxxx    7 年前

    现在我想创建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 所有实例之间共享的字段 ,创建此字段 static :

    public class Box{
    
        public static int value;
      ...
    }
    

    并以这种方式使用:

    Box bb = new Box();
    bb.value = 25;
    Box cc = new Box();
    System.out.println(cc.value);
    

    它不会避免创建多个 但它将为 int value 领域

        2
  •  2
  •   Monkey    7 年前

    这应该可以回答您的问题:

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

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