繁体   English   中英

Java-Arraylist实现的疑问

[英]Java - Arraylist implementation doubtt

我已经初始化了一个如下的arraylist:

private ArrayList<Automobile> car = new ArrayList();

然后在构造函数中,我有以下内容:

public vehicles() {
car = new ArrayList();
}

有人可以告诉我,构造器工具(car = new ArrayList();)的第二部分确实需要吗? 它有什么作用?

重新初始化car ,您已经丢弃了一个List ,并且使用的是Raw Types 请不要 使用菱形运算符<>代替,

private ArrayList<Automobile> car = new ArrayList<>();

同样,类名应以大写字母开头,因此vehicles实际上应为Vehicles (或Vehicle )。

对象创建的初始化顺序为

1)初始化字段

2)执行构造函数。

在您的情况下,当您创建vehicles类对象时。 第一场初始化将发生

private ArrayList<Automobile> car = new ArrayList<>();

然后它将执行构造函数。

public vehicles() {
  car = new ArrayList<>();
}

因此,参考car将使用新的ArrayList对象重新初始化。

因此,您可以避免字段初始化或构造函数中的初始化。

因为只有一辆参考车,所以编码不会出现任何问题。 汽车参考将指向构造函数创建的对象。 由field创建的对象将由垃圾回收器接收,但它是不必要的。

不需要 您要初始化car变量两次。 第二次初始化(在构造函数中)覆盖对在car成员的声明中初始化的列表的引用。 因此,您正在创建两个对象,其中一个从未使用过,并且可以立即被垃圾回收(因为您没有对其进行任何引用)。

没有它不需要。 相同的arraylist将被初始化两次。 所以将要发生的是:

当您尝试说实例化您的类时,它将首先尝试创建在构造函数之外定义的实例。

接下来,当调用构造函数时,您将再次覆盖先前在构造函数中创建的引用。

如果要强制执行而不能有意或无意地实例化,请在将final关键字定义为类成员时使用它。 这样,您最终不会在构造函数中创建对象。

即使您不实例化最终成员变量,编译器也不会高兴,并且会要求您在您创建的默认构造函数中实例化它。

如果仅声明变量,则需要在构造函数中进行初始化

私有ArrayList汽车;

但是,如果要对其进行初始化,则无需在构造函数中进行

私有ArrayList汽车= new ArrayList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM