初始化ArrayList。必要时?

时间:2011-10-09 10:34:25

标签: java arraylist

我的工作给应用程序带来的印象是,当我在Java 7中的类中定义一个ArrayList属性时,当我想要访问它时,没有必要初始化它(使用new作为新的Object)在第一次的方法。尽管如此,我总是收到一个nullPointerException错误(在我的个人家用电脑上),尽管已经安装了JDK1.7.0。是否有更新版本我应该安装以克服这种令人讨厌的事件?

公共类AdditionNode {

private VectorOperationCodeGen nodeCodeGen;
protected ArrayList<VectorInTree> connectedVectors;

... ... ...

public void inputVector(VectorInTree inputVector){

    if(inputFlag==2||inputFlag==0){

    if(this.connectedVectors.isEmpty()){

最后一行引起nullPointerException。应该这样吗?

6 个答案:

答案 0 :(得分:2)

  

我在Java 7中的类中定义了一个ArrayList属性,但事实并非如此   必要时初始化它(使用new作为新对象)   首次在方法中访问它。

这是 false 。是什么给你的印象?

答案 1 :(得分:2)

  

我的工作对应用程序产生的印象是,当我在Java 7中的类中定义ArrayList属性时,没有必要对其进行初始化

如果您要使用 ArrayList,那么您最好初始化它。

只需做

ArrayList<SomeType> list;

您刚刚向ArrayList声明了引用,而实际上并未创建ArrayList。

如果你想在初始化时“懒惰”,那么每当你需要访问list引用的列表时,你就必须这样做

ArrayList<SomeType> list;

// ...

if (list == null)
    list = new ArrayList<SomeType>();
list.add(someElement);

答案 2 :(得分:2)

从Java的最开始,引用的默认值(你称之为“ArrayList属性”)就是null。这也将在未来不会改变。因此,有人必须在使用列表之前初始化它们。

因此,这个简单的声明列表引用,使用null初始化

class MyClass {
    private ArrayList<String> list;
}

要声明使用实际实例进行初始化,只需执行以下操作:

class MyClass {
    private ArrayList<String> list = new ArrayList<String>();
}

在工作中你可能会使用一些框架,这些框架可以为你做几乎神奇的事情。更好地检查一下使用了什么框架并学习 他们如何实现他们的魔力,最重要的是当他们做时以及何时不做这种魔术。

答案 3 :(得分:1)

如果我可以说出我的意见,那么这是一个非常奇怪的印象。如何在没有初始化的情况下使用对象(例如数组列表)并声明引用?只引用对象并初始化它,您可以使用该对象。

如果您可以说的话,没有必要在内存上引用某些内容,并且您已经解决了内存分配问题。 : - )

你的问题应该更清楚。

修改

现在您已更新了问题。 是的,应该就像你说的那样。您正在使用if(this.connectedVectors.isEmpty()){行上的编译器接收NullPointerException,因为您之前未使用new运算符初始化connectedVectors对象。

如果你刚开始使用java编程,这被认为是一个典型的错误,现在你被原谅了:-) 即使被遗忘的对象初始化被认为是初学者程序员的典型错误,这也是一个重要且严重的错误,您不能重复。

答案 4 :(得分:0)

据我所知,在使用之前无法避免初始化对象。 即使这是真的,你也应该初始化它,因为如果你的用户没有使用你所指的java版本,他会遇到很多错误。

不过,我认为你不能做你所说的话。

答案 5 :(得分:0)

这种“令人讨厌的事件”是Java编程语言设计的一部分,并且从一开始就没有改变。你的期望/印象是错误的。