Java 获取对象列表

Java 获取对象列表,java,list,object,arraylist,iterator,Java,List,Object,Arraylist,Iterator,这让我抓狂——我如何才能让应用程序准确打印出来: auto1 auto2 auto3 这些是我要显示的数组列表中的对象。在我的结果中,我得到的是三个对象的地址内存地址 这是我的密码: //Datenfelder private ArrayList<Car> auto; //End-Datenfelder //Konstruktoren CarCreator(){ auto = new ArrayList<Car>(); Car auto1 = new

这让我抓狂——我如何才能让应用程序准确打印出来:

auto1
auto2
auto3
这些是我要显示的数组列表中的对象。在我的结果中,我得到的是三个对象的地址内存地址

这是我的密码:

//Datenfelder
private ArrayList<Car> auto;
//End-Datenfelder


//Konstruktoren
CarCreator(){
    auto = new ArrayList<Car>();
    Car auto1 = new Car("Ferrari", "458 Italia", "Luxusklasse");
    auto.add(auto1);
    Car auto2 = new Car("Honda", "Civic", "Standardklasse");
    auto.add(auto2);
    Car auto3 = new Car("Mercedes-Benz", "C-Klasse", "Mittelklasse" );
    auto.add(auto3);
}
//Ende-Konstruktoren
//Datenfelder
私人ArrayList汽车;
//结束日期费尔德
//康斯特鲁克托伦
CarCreator(){
auto=新的ArrayList();
Car auto1=新车(“法拉利”、“458意大利”、“卢克萨斯克拉塞”);
自动添加(自动1);
汽车2=新车(“本田”、“思域”、“标准克拉斯”);
自动添加(自动2);
汽车3=新车(“梅赛德斯-奔驰”、“C-Klasse”、“米特格拉斯”);
自动添加(auto3);
}
//恩德·康斯特鲁克托伦
这是构建对象的地方。默认情况下,类的构造函数将这样做。 下面的方法现在应该按名称列出所有对象(auto1-auto3)。 为了显示对象,我创建了以下方法

//Methoden
//generiere Liste mit der Anzahl Objekte
public void getCar(){
    Iterator<Car> scrawler = auto.iterator();
    while(scrawler.hasNext()){
        Car carObject = scrawler.next();
        System.out.println(carObject);
    }
}
//Methoden
//安扎赫目标清单
公共车辆{
迭代器scrawler=auto.Iterator();
while(scrawler.hasNext()){
Car carObject=scrawler.next();
System.out.println(carObject);
}
}
如前所述,我得到的只是内存中该位置的地址。我知道它必须以我想要的方式工作,因为昨天我成功地显示了对象名称

干杯

Sunny

您可以在对象的类中编写一个方法getName,然后可以调用carObject.getName()

这种方法如下所示:

public String getName()
{
      return name;
}

您还可以为该类创建一个toString方法,并在尝试从对象打印信息时在System.out.println中调用该方法。

在派生类中重写
toString()
。对象类实现了一个
toString()
方法,默认情况下该方法返回其内存地址。您可以覆盖它以包含更多有用的信息。

您希望Java打印变量名。这在很多方面都是错误的

汽车是一个物体。您的变量是对该对象的引用。许多变量都可以指向该对象,因此您无法知道要打印哪个变量(除非只有一个变量指向该对象),我认为没有办法从JVM获取此信息

每个对象都有一个toString()方法。默认实现将打印一些奇怪的散列。可以重写此方法以返回对对象更有意义的字符串

如果你想要你想要的输出,我可以建议你

int i = 1;
for(Car car : auto) {
    System.out.println("auto " + i);
}

当你写Car auto1时,你告诉编译器“我需要一个Car类型的变量,我称这个变量为auto1”。。。但是编译器会将所有这些“文本”转换为字节码,因此在执行代码时您将无法访问这些信息

调用System.out.println(carObject);,正在调用方法“toString()”。默认情况下,Java实现这个显示指针地址(实际上就是您看到的)的方法

尝试将此添加到您的汽车类中,并让我知道是否有助于您:

public class Car {

private String brand;
private String model;

public Car(String brand, String model) {
    super();
    this.brand = brand;
    this.model = model;
}

@Override
public String toString() {
    return "Car [brand=" + brand + ", model=" + model + "]";
}
}

最后要知道的是字符串和调用System.out上的+运算符会降低性能,因此,只需进行测试即可,但如果您希望在代码上留下跟踪,则需要使用用户记录器和更好的toString实现


最后一个提示是,如果您使用的是eclipse,您可以在类-->源-->生成toString()上单击右键。。。这可以节省一些时间。

我不知道如何使用这些代码部分获取对象的名称?在这个阶段,我的想法完全是错误的吗?我正在使用一个ArrayList,到目前为止,它的名称还没有保存在变量名中。您在carObject类中有一个名称为的字符串吗?谢谢-这还不错。但是请记住,构造函数具有预定义的值并自动创建对象。这就是背后的想法…我不明白你的意思,你对这个系统的具体意图是什么。出来?首先我想看看ArrayList是如何构建的。只是为了更好地理解我。目前还不需要,只是出于兴趣。我之所以得到问号,是因为我确信昨天看到数组列表中的所有对象(按名称)效果很好。