当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/1177074/

相关文章:

  • 【Midjourney批量生成终极指南】:20年AI图像工程师亲授17种高精度可控批量工作流(含V6.1最新API+Discord Bot实战)
  • 《机械工厂6S白皮书05|第4章 执行核心:6S执行力三问诀——跳出“员工不听话“误区,把人员管理难题转化为系统优化问题,打通全员长效自主落地通道》
  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • 2026年不错的AI漫剧制作平台 核心优势与适配场景
  • 可白嫖源码---课程设计--毕业设计--springboot3中医养生药膳推荐系统[编号:project11931](案例分析)-附源码
  • 用Ai开发微信小程序,没想到那么简单(三)视频提取
  • RAG 实战教学完全指南
  • HLW8112芯片软件实现代码(8)
  • closeEvalDialog is not defined、pages.json 语法、硬编码 ID ——记几个低级错误
  • 去烟味喷雾效果好的有哪些?核心特质解析与全场景选购使用指南 - 行业洞察分析师
  • Socket网络编程入门:UDP+TCP双案例手把手教你写服务器
  • 免费开源2D动画制作软件:OpenToonz完整指南
  • Glorytun安全配置详解:保护你的UDP隧道通信的完整策略
  • 快速上手PUBG地图黑客:5分钟搭建实战指南
  • 开心消消乐分数系统详解:如何设计刺激玩家的积分机制
  • 如何用PrivateGPT快速搭建企业级私有化AI应用:完整指南
  • morss部署教程:从本地到云端的完整步骤指南
  • 【Matlab】不确定干扰下无人机鲁棒控制实现
  • 我的第一个工具调用Agent:从零构建“知识库+计算器+时间+文件”四合一智能体
  • 手把手教你学pcie--TLP 长什么样?(不看协议也能懂)
  • 如何利用开源AI框架实现精准时间序列预测:5个关键技术解析
  • Rufus终极指南:三步搞定Windows 11安装,轻松绕过TPM 2.0限制
  • 暑期学习怎么做才有效?别再让孩子“假努力”,这套学习方法正在被家长用起来
  • vagas平台的未来路线图:即将到来的功能与改进
  • MetaTube SDK Go实战案例:构建企业级元数据管理平台的完整方案
  • 【API文档自动化革命】:ChatGPT生成高质量OpenAPI文档的5大实战范式(2024企业级落地指南)
  • Inventory Kamera实战教程:如何一键扫描并导出原神完整库存数据
  • 智能拼版构建柔性与刚性线路板智造
  • 如何快速部署本地大语言模型:TextGen完整使用指南
  • 如何用PyQt-SiliconUI在5分钟内构建专业级桌面应用界面