我似乎对我准备的构造函数的输出有问题。
在学习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
有人可以指出为什么输出是这样的吗?
非常感谢。
答案 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();
}