Java打印自定义类输出为类名+哈希码 如何修改为自定义字符串格式
问题原因
- 直接调用
System.out.println(factory.getItems())实际是打印Item数组对象的默认toString返回值,输出的是数组的类型+内存哈希地址,并非数组内部的Item内容 - Item类没有重写toString方法,就算遍历数组直接打印Item对象,默认也只会输出对象的内存地址,不会展示name、category的实际值
- 你贴出的Item类存在语法错误:构造方法写在了类的大括号外部,运行时会直接报错,需要先修正该问题
解决步骤
1 修正Item类语法并添加toString重写
修改后的Item类代码如下:
public class Item { String name; String category; // 将构造方法移到类内部 public Item(String name, String category) { this.name = name; this.category = category; } public String getName() { return name; } public String getCategory() { return category; } public void setName(String name) { this.name = name; } public void setCategory(String category) { this.category = category; } // 重写toString,自定义Item对象的打印内容 @Override public String toString() { return "商品名:" + name + ",分类:" + category; } }
2 修改打印Item数组的逻辑
不能直接打印数组对象,需要遍历数组输出每个Item的内容,修改主程序的ispisTvornica方法:
public static void ispisTvornica(Factory factory){ System.out.println("Naziv: " + factory.getName()); System.out.println("Web adresa: " + factory.getAddress()); System.out.println("Odabrani artikli: "); // 遍历Item数组逐个打印 for(Item item : factory.getItems()){ // 因为已经重写了Item的toString,直接打印即可输出内容 System.out.println("- " + item); } }
如果需要把所有商品内容拼在一行打印,可以调用JDK自带的Arrays.toString()方法,先在主程序顶部导入包:
import java.util.Arrays;
打印代码改为:
System.out.println("Odabrani artikli: " + Arrays.toString(factory.getItems()));
可选:给Factory类也重写toString方法
如果希望直接打印Factory对象就能输出全部信息,可以在Factory类中添加toString重写:
@Override public String toString() { return "工厂名称:" + name + ",地址:" + address + ",商品列表:" + Arrays.toString(items); }
配置完成后,你直接调用System.out.println(factory)就可以打印该工厂的所有信息。
内容的提问来源于stack exchange,提问作者ivuksan
相关产品推荐
相关产品推荐

