Java 输出不正确的构造函数?
我似乎对我准备的构造函数的输出有问题 在学习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
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我认为这只是展示代码的更好方式。但是是的,它可以通过返回一个长字符串来写入。这是自己选择的问题。:)