我的Java数组存在问题。我在类中使用数组作为类字段,因为我没有实例化类,所以它们都是静态的。我这样调用一个数组(顺便说一下,这是一个对象数组,' Customer'是它自己的类):
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;
但后来我得到了nullpointerexception。使这个数组正常工作的最佳方法是什么,因此元素不指向数组的相同索引? 我确定正确的答案也避免了NPE ...
答案 0 :(得分:4)
你需要做两件事。创建一个新数组并将新对象放入该数组中。
public static Customer[] cDatabase = new Customer[MAX_DATABASE];
for(int i = 0; i<className.MAX_DATABASE; i++){
className.cDatabase[i] = new Customer();
}
答案 1 :(得分:2)
确保您firstName
课程中的static
字段本身未被声明Customer
,否则它只会保留一个可能的值。
class Customer {
private String firstName;
...
}
一般而言,使用公共字段并不是一个好的设计。考虑使用getter&amp;这些领域的制定者。这同样适用于cDatabase
数组字段本身。
答案 2 :(得分:2)
如果每个单元格的所有firstName
都发生了变化,那么事情就可能是两个:
firstName
课程中将static
声明为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
个不同的实例。修改一个不会影响其他人。