输出错误的构造函数?

时间:2014-05-11 19:22:32

标签: java constructor output

我似乎对我准备的构造函数的输出有问题。

在学习Java的过程中,我试图让自己熟悉构造函数及其重要性。

我想做的就是输出一种车型。

这是我的代码:

public class Car
{

public String cm;
public int hp;
public String col;
public String vtype;
public String intr;
public int ts;



Car(String carMake, int horsePower, String colour, String vehicleType, String interior, int   topSpeed){
    carMake = cm;
    horsePower = hp;
    colour = col;
    vehicleType = vtype;
    interior = intr;
    topSpeed = ts;
}


public static void main (String [] args){
    Car carA = new Car("BMW", 2000, "Black", "1 Series", "Leather", 155); 

    System.out.println("This is your car: " + carA);
    }
}

但是,我的输出是:

This is your car: Car@5db2381b

有人可以指出为什么输出是这样的吗?

非常感谢。

3 个答案:

答案 0 :(得分:2)

默认情况下,Java将对象实例转换为String。通过创建由类名(Car)组成的名称,并为@添加一些“唯一”ID。为了使其更具人性化,您必须重载类中的public String toString()方法。

答案 1 :(得分:1)

您创建的每个课程都继承自Object类,其中包含一些方法,其中一个是.toString(),用于将通用Object转换为String。 ..它用于“用户”输出。

默认

public String toString() {
    return getClass().getName() + '@' + Integer.toHexString(hashCode());
}

它将返回类的名称,@和当前对象的hashCode。

要为你的班级提供一个伟大而美丽的输出,你应该覆盖它。

示例:

@Override
public String toString()
{
    return "My car is a " + cm;
}

(注意:@Override和方法的名称相同)

你的代码的另一个问题是你不改变类的字段,而是改变参数值(它将在构造函数之后丢失。)

Car(String carMake, int horsePower, String colour, String vehicleType, String interior, int   topSpeed){
    carMake = cm;
    horsePower = hp;
    colour = col;
    vehicleType = vtype;
    interior = intr;
    topSpeed = ts;
}

如您所见,您将carMake的值更改为cm null(因为它是一个字符串),因此您的输出将为空且为0。将其翻转cm = carMake以使其有效。 (与其他相同)

答案 2 :(得分:1)

首先你的构造函数是错误的。这不是你编写构造函数的方式,你将一些参数传递给构造函数,然后将这些参数赋给你的类变量。因此,在您的情况下,您的构造函数将遵循,

Car(String carMake, int horsePower, String colour, String vehicleType, String interior, int   topSpeed){
    cm = carMake;
    hp = horsePower;
    col = colour;
    vtype = vehicleType;
    intr = interior;
    ts = topSpeed;
}

对于您的问题的解决方案,您正在寻找的是覆盖类汽车的toString方法。这可以做如下。

@Override
public String toString()
{
    StringBuilder sb = new StringBuilder();
    sb.append("Car Make: ");
    sb.append(cm);
    sb.append("\n");   //You can use System.getProperty("line.separator") if you want to make it platform independent 
    sb.append("Car colour: ");
    sb.append(col);
    //You can append as many details of your class car this way.
    //and finally just return the StringBuilder as String. 
    return sb.toString();
}