使用构造函数的基本打印输出问题

时间:2020-09-11 06:01:02

标签: java constructor

public class Store {

  public Store(String product, int count, double price) {
  
  }

  public static void main(String[] args) {
    Store cookieShop = new Store("cookies", 12, 3.75);
    System.out.println(cookieShop);
  }
}

我似乎无法打印出我分配给 cookieShop 的值。

预期输出:

cookies123.75

输出:

Store @ 2aae9190

初学者在这里。谢谢。

3 个答案:

答案 0 :(得分:1)

  1. 您在构造函数中什么也不做。
  2. 如果在不覆盖toString()的情况下打印此对象,则将获得十六进制表示形式。 做下面的事情
public class Store {

  String product;
  int count;
  double price;
  public Store(String product, int count, double price) {
  
      this.product=product;
      this.count=count;
      this.price=price;
  }

  public static void main(String[] args) {
    Store cookieShop = new Store("cookies", 12, 3.75);
    System.out.println(cookieShop);
  }

  @Override
   public String toString() {
    return "Store [product=" + product + ", count=" + count + ", price=" + price + "]";
  }
  
  
}

答案 1 :(得分:0)

嗨,这是因为您永远不会在构造函数中评估输入变量。尝试定义一些类变量(私有字符串乘积;私有int计数;私有双倍价格),然后在构造函数中将输入分配给类varabiables。比为类变量创建getter和setter方法并重写toString()方法(此操作可以轻松地委派给您的IDE,即Eclipse或Intellij)。 重新运行程序,看看会发生什么。

答案 2 :(得分:-2)

您需要为Store类定义一个toString方法。默认情况下,如果未在您的类中覆盖所有对象,则所有对象都使用java.lang.Object(https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--)类中的toString方法,该方法仅显示类的名称和十六进制表示形式:

getClass().getName() + '@' + Integer.toHexString(hashCode())

尝试类似的操作(使用您自己的字段名称):

@Override
public String toString() {
    return name + count + price;
}

还考虑使用lombok之类的库,只需添加相应的批注,即可使所有这些工作变得非常容易。

相关问题