我的工作给应用程序带来的印象是,当我在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。应该这样吗?
答案 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编程语言设计的一部分,并且从一开始就没有改变。你的期望/印象是错误的。