1

我有这门课

public class NInfo {
private  int val;
private static int indx=1;

public NInfo(int val) {
    this.val = val;
    this.indx++;
    }
}

我想在我创建的每个新对象中自动增加索引 1 这个代码不起作用,我应该修复什么?

4

4 回答 4

4

类的每个实例都共享一个静态字段。您需要将该值存储在特定于该实例的新字段中。

public class NInfo {
private  int val;
private int index;
private static int indx=1;

public NInfo(int val) {
    this.val = val;
    this.index = indx++;
    }
}

我会对您为什么要将这些索引添加到每个类感兴趣。

于 2013-05-26T20:07:06.923 回答
1

类的每个对象都具有类中定义的所有属性和方法,静态对象除外。静态变量和方法不是类实例的一部分。this.运算符用于引用类的特定实例。要引用静态变量,您无需实例化对象。您可以使用 直接引用变量ClassName.variableName。因此,每次在代码中创建变量的新实例时,indx 都会递增(从 2 开始,因为您已经对其进行了后递增)。

为了给一个对象分配一个新的递增值,递增 indx 并将它分配给一个实际上是类实例一部分的变量(即一个非静态变量)。

于 2013-05-26T20:24:31.183 回答
0

您忘记了赋值运算符操作。

NInfo.indx += 1;

编辑

public class NInfo {

  private int id;
  private int value;

  private static int index; // auto initialized to 0

  public NInfo(int value) {
    this.val = val;
    this.id = NInfo.index += 1;
  }

}
于 2013-05-26T20:08:12.367 回答
0

你应该像属性一样在构造函数中传递索引,并增加你创建的索引

于 2013-05-26T20:08:26.737 回答