代码之家  ›  专栏  ›  技术社区  ›  maček

这段Java代码是什么意思?

  •  0
  • maček  · 技术社区  · 14 年前

    首先,我不要求任何人做我的家庭作业。我只是对这种Java语法感到困惑。

    下面是作业描述和我必须实现的两个类。第一个是这里仅供参考。 第二个是我遇到麻烦的那个。

    在计算机科学的许多应用中,用理论上不具有最大值的数字编程是必要的。你要写一系列的类来开始这个任务。最后一个类将允许您表示并至少添加任意长度的二进制数。

    // You are to write (implement) this class exactly as dictated by the following list of class members.
    public abstract AbstractBit: 
    
      private boolean bit;
    
      public abstract AbstractBit clone(); 
      public abstract AbstractBit addBits(AbstractBit guest);
      public abstract AbstractBit addBits(AbstractBit guest1, AbstractBit guest2);
      public abstract AbstractBit carryBit(AbstractBit guest);
      public abstract AbstractBit carryBit(AbstractBit guest1, AbstractBit guest2);
    
      protected void setBit(boolean value)
    
      public boolean getBit()
    
      public AbstractBit()
    
      public AbstractBit(boolean value)
    
      public AbstractBit(AbstractBit guest)
    
      public boolean equals(AbstractBit guest)
    
      public String toString()
    

    这些到底是什么?

    为什么要添加类型为的静态类变量 BinaryBit ? 这不是会以某种方式递归吗?(见标有 ???? )

    // You are to write (implement) this class exactly as dictated by the following list of class members.
    public BinaryBit extends AbstractBit: 
    
      public static final BinaryBit zero = new BinaryBit(false);  // ????
      public static final BinaryBit one = new BinaryBit(true);    // ????
    
      public BinaryBit()
    
      public BinaryBit(boolean bit)
    
      public BinaryBit(int bit)
    
      public BinaryBit(BinaryBit guest)
    
      public BinaryBit clone()
    
      public boolean equals(BinaryBit guest)
    
      public String toString()
    
      public AbstractBit addBits(AbstractBit guest)
    
      public AbstractBit addBits(AbstractBit guest1, AbstractBit guest2)
    
      public AbstractBit carryBit(AbstractBit guest)
    
      public AbstractBit carryBit(AbstractBit guest1, AbstractBit guest2)
    
    5 回复  |  直到 14 年前
        1
  •  3
  •   Jeffrey Hantin    14 年前

    位只有两个可能的值——0和1。任何给定的0或1都和任何其他的一样好。因此,为什么不创建一个“罐装”的、不可更改的0和1值,并只传递对这些值的引用呢?它节省了内存和处理器时间。您可能会看到这种方法称为 Flyweight pattern .

    您可以在Java的 BigInteger 类,具有公共数字的预定义值,如 ZERO , ONE TEN .

        2
  •  5
  •   Jeanne Boyarsky    14 年前

    这是一种仅当有限数量的实例存在时使用的技术。它们都被声明,然后被称为常量。传统上称它们为0和1是为了更明显地表明它们是常数。它实际上不是递归的,因为静态变量只创建一次。

        3
  •  0
  •   hvgotcodes    14 年前

    因为位只能有两个值1和0,所以您正在创建对表示这些值的对象的静态引用。这比每次需要表示1或0时创建新对象更有意义。

        4
  •  0
  •   Jeffrey    14 年前

    零和一是预定义可在代码中使用的模板的方法。另一个例子是使用String.empty,它是一个空字符串的实例化,这样您就可以执行if(“==String.empty)之类的操作。它只是让你的代码更可读。

        5
  •  0
  •   Matthew Flaschen    14 年前

    不,它不是递归的。它只是意味着类的静态初始化将创建其自身的实例。在创建实例之前,字段为空,但除非使用 zero one 在构造器中。