Java构造函数调用及print方法错误排查与修复请求
问题分析与修复方案
错误原因解析
- 构造函数调用参数错误:创建
minor3时,把5.5误写为5,5,逗号会被当作参数分隔符,导致传入了5个参数(int, int, int, int, boolean),但类中没有对应参数列表的构造函数,触发报错。 - 实例方法调用方式错误:
print()是Minor类的非静态实例方法,必须通过对象实例调用(对象.print()),你直接用print(对象)的方式,相当于试图调用一个需要传入Minor对象的静态方法,而类中没有定义该方法,导致参数不匹配报错。 - 未按要求使用三个构造函数:原main方法里三个对象都用了四参数构造,未用到无参和单参数构造,不符合“用3个不同构造函数创建对象”的需求。
修复后的完整代码
/** class Student * with 4 instance variables, * 3 constructors, a print method, * and a main method to test them. */ public class Minor { // 4个实例变量 private int id; private int age; private double height; private boolean goodVictim; // 3个构造函数初始化实例变量 // 1. 无参构造,使用默认值 public Minor() { id = 0; age = 11; height = 5; goodVictim = true; } // 2. 单参数构造,其余使用默认值 public Minor(boolean initGoodVictim) { this(); // 调用无参构造复用默认值初始化逻辑 goodVictim = initGoodVictim; } // 3. 四参数构造 public Minor(int initId, int initAge, double initHeight, boolean initGoodVictim) { id = initId; age = initAge; height = initHeight; goodVictim = initGoodVictim; } // 打印所有实例变量的方法 public void print() { System.out.println("ID: " + id); System.out.println("年龄: " + age); System.out.println("身高: " + height); System.out.println("是否为goodVictim: " + goodVictim); System.out.println("------------------------"); // 分隔不同对象的输出,提升可读性 } // main方法 public static void main(String[] args) { // 使用3个不同构造函数创建Minor对象 Minor minor1 = new Minor(); // 无参构造 Minor minor2 = new Minor(false); // 单参数构造 Minor minor3 = new Minor(12052008, 14, 5.5, true); // 四参数构造 // 调用各自的print()方法 minor1.print(); minor2.print(); minor3.print(); } }
修复说明
- 修正构造函数参数:将
minor3创建代码中的5,5改为5.5,确保参数数量、类型与四参数构造函数匹配。 - 修正方法调用逻辑:把
print(minor1)改为minor1.print(),通过对象实例调用非静态方法。 - 按需求使用构造函数:分别用无参、单参数、四参数构造函数创建三个对象,满足题目要求。
- 优化构造函数复用:在单参数构造中添加
this()调用无参构造,避免重复编写默认值初始化代码,提升可维护性。 - 优化输出可读性:给
print方法的输出添加字段说明和分隔线,让结果更清晰。
内容的提问来源于stack exchange,提问作者Mohammad Kherfan
相关产品推荐
相关产品推荐

