2013-02-19 69 views
1

我对Java很陌生,在处理对象数组时遇到了问题,答案可能很简单,但我看不到它。Java对象数组

我有一个类名为向量和一个名为set_components() 我尝试做的是创建对象的一个​​这样的数组功能:

Vectors[] vec = new Vectors[2]; 

//然后访问功能是这样的:

vec[0].set_components(); 

但是我得到这个错误:线程“main”中的异常java.lang.NullPointerException 这是为什么?

它的作品,如果我只为一个对象做这个。

Vector vec = new Vector(); 
vec.set_components(); 

回答

5

你的数组已经被构造出来,但是没有任何东西被填充,并且空引用。如果在用实例填充数组之前尝试使用数组中的项目,则会看到一个NPE。想象一个像蛋箱一样的对象数组。您必须先填写鸡蛋(矢量对象),然后才能使用它们制作煎蛋。通常这是通过for循环完成的。

for (int i = 0; i < vectors.length; i++) { 
    vectors[i] = new Vector(); 
} 
+0

谢谢!它现在的作品:)喜欢你的解释。 – 2013-02-19 03:46:22

+0

@MarioFuentes:很高兴帮助! – 2013-02-19 03:48:30

3

每个那些Vectors的应该初始化

这样的:

for(int i = 0; i < vec.length; i++){ 
    vec[i] = new Vector(); 
} 

Vectors[] vec = new Vectors[2]行创建2 “载体” 的引用,而不是 “载体” 的对象。

其中的每一个最初都是指null。然后,当你试图引用null参考说,vec[0]vec[0].set_components();,JVM说:“坚持,vec [0]指向null。我不能解除引用它..让我只是抛出一个异常,称为NullPointerException”

0

Java对象从不显示为表达式,变量,参数或数组元素。如果它不是原始的,它就是一个参考。一个引用或者是null,或者是一个指向对象的指针。

您创建了一个空引用数组。您需要更改数组中的每个元素,使其成为指向Vectors对象的指针:vec[0] = new Vectors();或类似的指针。