Java 面向对象基础:构造方法、toString重写与封装实战详解

目录

题目介绍

题目要求梳理

完整可运行代码

代码逐段详细解析

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 面向对象的基础认知,为后续继承、多态、接口、抽象类学习打下扎实基础。