这让我发疯了 - 我怎样才能让应用程序完全打印出来:
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
这是构建对象的地方。默认情况下,类的构造函数将执行此操作。 现在,以下方法应按名称列出所有对象(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);
}
}
如上所述,我得到的只是内存中地址的地址。我知道它必须按照我想要的方式工作,因为昨天我成功地显示了对象名称。
欢呼声
晴天
答案 0 :(得分:1)
在派生类中覆盖toString()
。 Object类实现了一个toString()
方法,默认情况下返回其内存地址。您可以覆盖它以包含更多有用的信息。
答案 1 :(得分:1)
您希望Java将打印变量名称。这在很多方面都是错误的......
汽车是一个对象。您的变量是对该对象的引用。许多变量可以指向该对象,因此您无法知道要打印哪个变量(除非只有一个变量指向该对象)并且我不认为有办法获得此来自JVM的信息。
每个对象都有一个方法toString()。默认实现将打印一些奇怪的哈希。您可以覆盖此方法以返回对您的对象更有意义的String。
如果你想要你想要的输出,我建议你做一些像
这样的事情int i = 1;
for(Car car : auto) {
System.out.println("auto " + i);
}
答案 2 :(得分:0)
您可以在Object的类中编写方法getName,然后可以调用carObject.getName();
这种方法看起来像这样:
public String getName()
{
return name;
}
您还可以为类创建一个toString方法,并在尝试从Object打印信息时在System.out.println中调用它。
答案 3 :(得分:0)
当您编写Car auto1时,您告诉编译器“我需要一个类型为car的变量,我将此变量称为auto1”...但是编译器将所有这些“text”转换为字节码,因此您将无法访问正在执行代码时的这些信息。
当您调用System.out.println(carObject);时,正在调用方法“toString()”。默认情况下,Java实现此方法显示指针地址(实际上就是您所看到的)。
尝试在您的Car课程中添加此内容并告诉我是否可以帮助您:
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 + "]";
}
}
你应该知道的最后一件事是Strings上的+运算符并且调用System.out会有性能成本所以,这样做只是为了测试,但是如果你想在你的代码上留下痕迹那么用户记录器和toString的更好实现。
最后一个提示,如果你使用eclipse,你可以点击你班上的右键 - &gt;来源 - &gt;生成toString()...这可以节省一些时间。