1

我在 Java 中的数组有问题。我在类中使用数组作为类字段,因为我没有实例化类,所以它们都是静态的。我这样称呼一个数组(顺便说一句,这是一个对象数组,“客户”是它自己的类):

 public static Customer[] cDatabase = new Customer[MAX_DATABASE];

其中 MAX_DATABASE 是一个常量,表示最大条目数。但是当我输入时会发生什么:

 className.cDatabase[0].firstName = "John";

(为了简单起见避免使用方法)该值已调整,但数组中每个其他单元格中的每个 firstName 字段也会更改。我确信这与我调用数组的方式有关,但是当我这样做时:

 for(int i = 0; i<className.MAX_DATABASE; i++){
      className.cDatabase[i] = new Customer();
 }

像这样声明字段后:

 public static Customer[] cDatabase;

但后来我得到空指针异常。使该数组正常工作以使元素不指向数组的相同索引的最佳方法是什么?我敢肯定,正确的答案也可以避免 NPE ...

4

3 回答 3

4

你需要两者都做。创建一个新数组并将新对象放入该数组。

public static Customer[] cDatabase = new Customer[MAX_DATABASE];
for(int i = 0; i<className.MAX_DATABASE; i++){
      className.cDatabase[i] = new Customer();
}
于 2012-12-31T01:32:30.877 回答
2

确保您的firstName字段本身未static在您的Customer类中声明,否则它将只包含一个可能的值。

class Customer {
  private String firstName;
  ...

}

一般来说,使用公共领域也不是好的设计。考虑对这些字段使用 getter 和 setter。这同样适用于cDatabase数组字段本身。

于 2012-12-31T01:27:12.370 回答
2

如果firstName每个单元格都发生变化,那么事情可能是两个:

  • 您在课堂上声明firstName并忽略了声明您应该以静态方式访问它的警告staticCustomer
  • 您正在将相同的 Customer 实例分配给数组的所有元素

例如

Customer[] array = new Customer[MAX];
Customer c = new Customer();
for (int i = 0; i < MAX; ++i)
  array[i] = c;

这里数组的所有元素都指向相同的元素,Customer因此您始终修改并从每个单元格中获取相同的元素。

你应该做的是:

Customer[] array = new Customer[MAX];
for (int i = 0; i < MAX; ++i)
  array[i] = new Customer();

通过这种方式,您可以创建MAX不同的Customer. 修改一个不会影响其他的。

于 2012-12-31T01:36:01.033 回答