Java 输出不正确的构造函数?

Java 输出不正确的构造函数?,java,constructor,output,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, Stri

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

在学习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
有人能指出为什么输出是这样的吗


非常感谢。

这是Java默认将对象实例转换为字符串的方式。通过创建由类名(
Car
)组成的名称,并在
@
后面添加一些“唯一”id。为了使其更具可读性,您必须在类中重载
公共字符串toString()
方法。

这是Java默认情况下将对象实例转换为字符串的方式。通过创建由类名(
Car
)组成的名称,并在
@
后面添加一些“唯一”id。为了使其更具可读性,您必须在类中重载
公共字符串toString()
方法。

创建的每个类,继承自具有一些方法的
对象
类,其中一个方法是
.toString()
,用于将泛型
对象
转换为
字符串
。。。它用于“用户”输出

默认情况下

public String toString() {
    return getClass().getName() + '@' + Integer.toHexString(hashCode());
}
它将返回类的名称、a@和当前对象的hashCode

要为您的类提供出色的输出,您应该重写它

例如:

@Override
public String toString()
{
    return "My car is a " + cm;
}
(注意:
@Override
和方法的相同名称)

代码的另一个问题是,您没有更改类的字段,而是更改参数值(在构造函数之后将丢失这些参数值)


如您所见,您将
carMake
的值更改为
cm
,这是
null
(因为它是一个字符串),因此您的输出将是空的,并且是0。将其倒置,使其工作。(与其他类相同)

您创建的每个类都继承自具有一些方法的
对象
类,其中一个是
.toString()
,用于将泛型
对象
转换为
字符串
。。。它用于“用户”输出

默认情况下

public String toString() {
    return getClass().getName() + '@' + Integer.toHexString(hashCode());
}
它将返回类的名称、a@和当前对象的hashCode

要为您的类提供出色的输出,您应该重写它

例如:

@Override
public String toString()
{
    return "My car is a " + cm;
}
(注意:
@Override
和方法的相同名称)

代码的另一个问题是,您没有更改类的字段,而是更改参数值(在构造函数之后将丢失这些参数值)


如您所见,您将
carMake
的值更改为
cm
,这是
null
(因为它是一个字符串),因此您的输出将是空的,并且是0。将其倒置,使其工作。(其他的也一样)

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

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;
}
为了解决您的问题,您正在寻找的是重写car类的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();
}

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

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;
}
为了解决您的问题,您正在寻找的是重写car类的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();
}

我现在明白了。是的,我会相应地修改守则。谢谢你的回答。非常有用。谢谢你,马可。如何返回多个值?例如hp、col、vtype等?非常感谢。我现在明白了。是的,我会相应地修改守则。谢谢你的回答。非常有用。谢谢你,马可。如何返回多个值?例如hp、col、vtype等?非常感谢。谢谢你的回答,也谢谢你对我的构装师的帮助。信息量很大。如果答案对你有帮助,请投票并接受。还有,如果你有更多的疑问,我个人会避免使用StringBuilder,因为代码会更长,而且根本不会改进(无论如何,编译器都会使用StringBuilder来改进)@Marcacierno我认为这只是展示代码的更好方式。但是是的,它可以通过返回一个长字符串来写入。这是自己选择的问题。:)谢谢你的回答,也谢谢你对我的构装师的帮助。信息量很大。如果答案对你有帮助,请投票并接受。还有,如果你有更多的疑问,我个人会避免使用StringBuilder,因为代码会更长,而且根本不会改进(无论如何,编译器都会使用StringBuilder来改进)@Marcacierno我认为这只是展示代码的更好方式。但是是的,它可以通过返回一个长字符串来写入。这是自己选择的问题。:)