目录
题目介绍
题目要求梳理
完整可运行代码
代码逐段详细解析
1. 私有属性定义(封装特性)
2. 无参构造方法详解
3. 有参构造方法详解
4. toString 方法重写详解
5. getter / setter 方法详解
6. main 方法业务逻辑详解
输入输出演示
核心知识点总结
文末小结
题目介绍
本题是 Java 面向对象入门经典真题,核心考察:类的封装、私有属性定义、无参/有参构造方法、get/set 方法、toString 重写、数组对象遍历、逆序输出。
通过本题可以彻底掌握面向对象三大基础能力:封装特性、对象初始化、对象打印格式化,是新手入门必刷核心题型。
题目要求梳理
1. 定义 Person 类,私有属性严格顺序:String name、int age、boolean gender、int id;
2. 无参构造方法:打印固定语句,并按格式输出四个属性默认值;
3. 有参构造方法:对 name、age、gender 三个属性赋值;
4. 重写 toString 方法,固定格式输出对象所有属性;
5. 为所有私有属性生成 get/set 方法;
6. main 方法读取 n 个对象信息,批量创建对象,逆序输出所有对象,最后调用无参构造创建对象并打印。
完整可运行代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 读取对象个数 int n = sc.nextInt(); // 创建Person对象数组 Person[] persons = new Person[n]; // 循环创建对象 for (int i = 0; i < n; i++) { String name = sc.next(); int age = sc.nextInt(); boolean gender = sc.nextBoolean(); persons[i] = new Person(name, age, gender); } // 逆序遍历输出对象 for (int i = n - 1; i >= 0; i--) { System.out.println(persons[i]); } // 调用无参构造创建对象并打印 Person emptyPerson = new Person(); System.out.println(emptyPerson); } } class Person { // 严格按题目顺序定义私有属性 private String name; private int age; private boolean gender; private int id; // 无参构造方法 public Person() { System.out.println("This is constructor"); // 按指定格式输出默认属性值 System.out.println(name + "," + age + "," + gender + "," + id); } // 有参构造方法:初始化name、age、gender public Person(String name, int age, boolean gender) { this.name = name; this.age = age; this.gender = gender; } // 重写toString方法,固定输出格式 @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", id=" + id + "]"; } // 以下为所有属性get/set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isGender() { return gender; } public void setGender(boolean gender) { this.gender = gender; } public int getId() { return id; } public void setId(int id) { this.id = id; } }代码逐段详细解析
1. 私有属性定义(封装特性)
private String name; private int age; private boolean gender; private int id;面向对象核心思想:封装。使用 private 修饰成员变量,保证外部类无法直接访问、修改属性,只能通过公开的 get/set 方法操作数据,保证数据安全性。属性顺序严格遵循题目要求,不允许调换顺序。
属性默认值规则:
- 引用类型 String:默认 null
- 基本类型 int:默认 0
- 布尔类型 boolean:默认 false
2. 无参构造方法详解
public Person() { System.out.println("This is constructor"); System.out.println(name + "," + age + "," + gender + "," + id); }构造方法特点:方法名与类名完全一致、无返回值。
无参构造在对象 new 创建且不传参时自动执行。本题要求先打印固定语句,再按name,age,gender,id格式输出默认值,无需手动赋值,直接输出系统默认初始化值即可。
3. 有参构造方法详解
public Person(String name, int age, boolean gender) { this.name = name; this.age = age; this.gender = gender; }有参构造用于对象创建时直接初始化属性。
题目只要求对 name、age、gender 赋值,id 不赋值,因此 id 始终保留默认值 0。
this 关键字作用:区分局部参数和成员变量,this.属性代表当前对象的成员变量。
4. toString 方法重写详解
@Override public String toString() { return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", id=" + id + "]"; }toString 是 Object 类原生方法,作用是返回对象的字符串描述。
如果不重写,默认打印对象哈希地址,无实际意义;重写后可以自定义对象输出格式,直观展示对象所有属性。
当执行System.out.println(对象)时,系统会自动调用该对象的 toString 方法。
5. getter / setter 方法详解
由于成员变量被 private 私有化,外部无法直接访问,必须提供公开的访问、修改入口:
getter:获取私有属性的值,布尔类型规范使用isXxx()命名;
setter:修改私有属性的值,实现外部对私有数据的可控修改。
这是 Java 面向对象封装的标准写法,也是企业开发、考试的强制规范。
6. main 方法业务逻辑详解
// 读取创建对象个数 int n = sc.nextInt(); // 创建Person类型数组,存储多个对象 Person[] persons = new Person[n];首先读取用户输入的对象数量,开辟对应大小的对象数组,用于批量存储多个 Person 对象。
// 循环录入数据,批量创建对象 for (int i = 0; i < n; i++) { String name = sc.next(); int age = sc.nextInt(); boolean gender = sc.nextBoolean(); persons[i] = new Person(name, age, gender); }循环读取每一行的姓名、年龄、性别,调用有参构造方法初始化对象,存入数组。
// 逆序遍历输出 for (int i = n - 1; i >= 0; i--) { System.out.println(persons[i]); }常规遍历是正序,本题要求逆序输出,所以循环从最后一个下标开始向前遍历,依次打印对象。
// 无参构造创建空对象并打印 Person emptyPerson = new Person(); System.out.println(emptyPerson);最后调用无参构造,触发默认值打印语句,同时输出重写后的 toString 格式字符串,完全匹配题目输出样例。
输入输出演示
输入:
3 a 11 false b 12 true c 10 false输出:
Person [name=c, age=10, gender=false, id=0] Person [name=b, age=12, gender=true, id=0] Person [name=a, age=11, gender=false, id=0] This is constructor null,0,false,0 Person [name=null, age=0, gender=false, id=0]核心知识点总结
1. 封装:private 私有化属性,通过 get/set 方法对外提供访问入口,保证数据安全。
2. 构造方法:无参构造用于默认初始化,有参构造用于自定义初始化,创建对象自动触发。
3. toString重写:自定义对象输出格式,是Java调试、打印对象的必备技巧。
4. 对象数组与逆序遍历:可以批量管理多个对象,灵活控制输出顺序。
文末小结
本题是面向对象的入门标杆题型,几乎涵盖了新手必须掌握的所有基础语法:类与对象、封装、构造方法、方法重写、数组对象、循环遍历。熟练掌握本题代码逻辑,能彻底打通 Java 面向对象的基础认知,为后续继承、多态、接口、抽象类学习打下扎实基础。