Java面向对象必知必会:一文彻底搞懂封装(Encapsulation)

📅 发布时间:2026/9/6 7:43:45
Java面向对象必知必会:一文彻底搞懂封装(Encapsulation) 《Java面向对象必知必会一文彻底搞懂封装Encapsulation》1. 开篇从遥控器说起什么是封装想象一下你手里拿着一个电视机遥控器。你按音量键声音就变大了。但你完全不需要知道遥控器内部是红外线发射器在工作还是电路板在运算。面向对象编程中的封装做的事情跟遥控器一模一样——它把一个对象的内部细节属性、数据藏起来只对外暴露几个按钮方法供你操作。你只管按按钮不用管里面怎么实现的。2. 为什么需要封装一个“年龄负数”的惨痛教训假如你写了一个 Student 类里面有个 age 年龄属性。如果不做封装直接把 age 设置成 public 暴露给外部那么其他人可能随手写一行student.age -100;这就炸了——难道是上辈子吗但程序不会报错它只会把这个错误数据存进去在后面某个环节突然崩溃而你排查半天都找不到原因。封装的意义就在这里在数据入口加一道防火墙所有外部修改都必须经过 setAge() 方法我们可以在里面加入 if (age 0) 这样的判断把非法数据挡在外面。3. 封装三步走private、getter、setterpublic class Student {// 第一步属性私有化用private修饰外面不能直接访问private String name;private int age;// 第二步对外提供公共的getter方法用于读取数据 public String getName() { return name; } public int getAge() { return age; } // 第三步对外提供公共的setter方法用于修改数据并加入逻辑判断 public void setName(String name) { this.name name; // this代表当前对象 } public void setAge(int age) { // 封装的核心价值在这里加一道“防火墙”过滤非法数据 if (age 0 age 150) { this.age age; } else { System.out.println(年龄非法已自动设为0); this.age 0; // 默认值防止程序崩溃 } }}4. 代码实战学生信息管理系统完整案例public class TestStudent {public static void main(String[] args) {// 创建一个学生对象Student stu new Student();// 通过setter方法赋值数据被封装保护着 stu.setName(小明); stu.setAge(-5); // 故意传一个负数测试我们的“防火墙”是否生效 // 通过getter方法获取值 System.out.println(学生姓名 stu.getName()); System.out.println(学生年龄 stu.getAge()); // 此时输出的是 0而不是 -5封装成功保护了数据 }}运行结果学生姓名小明学生学生年龄0可以看到虽然我们传入了 -5但经过封装中的 setAge() 方法拦截后最终输出的年龄被安全地修正为 0程序没有因为非法数据而崩溃。5. 总结与互动 总结一下今天的内容封装的定义把对象的属性成员变量用 private 隐藏起来只通过 public 的 getter/setter 方法对外暴露访问入口。封装的好处保护数据安全防止非法赋值、提高代码可维护性修改内部逻辑不影响外部调用。核心语法private getXxx() setXxx() this 关键字。 互动时间评论区见如果让你给 setAge() 增加一条规则——“年龄必须大于18岁才能设置成功”你会怎么改代码呢欢迎在评论区留下你的答案我们一起讨论