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

Java基础教程(009): Java 的封装

文章目录

  • 8、封装
    • 8.1、什么是封装?
    • 8.2、为什么需要封装?
    • 8.3 示例代码

8、封装

8.1、什么是封装?

封装就是把对象的属性和方法“包裹”起来,控制外部是否允许直接访问它们。

  • 通过访问修饰符(如 private)隐藏属性。
  • 通过 public 方法(getter/setter)提供对这些属性的安全访问。

8.2、为什么需要封装?

  1. 保护数据,防止被非法访问或赋值。
  2. 控制访问级别,提供统一入口修改属性。
  3. 增强代码的可维护性和可读性。

8.3 示例代码

我们在前面的 Student 类基础上,做如下封装:

1️⃣封装后的类:

package src.com.wang.test;public class Student2 {// 私有属性,外部不能直接访问private String name;private int age;private double score;// 公共的 Getter 和 Setter 方法public String getName() {return name;}public void setName(String name) {// 可以加判断,防止设置非法值this.name = name;}public int getAge() {return age;}public void setAge(int age) {if (age > 0 && age < 150) {this.age = age;} else {System.out.println("年龄不合法!");}}public double getScore() {return score;}public void setScore(double score) {if (score >= 0 && score <= 100) {this.score = score;} else {System.out.println("成绩不合法!");}}// 其他方法public void printInfo() {System.out.println("学生姓名: " + name);System.out.println("学生年龄: " + age);System.out.println("学生成绩: " + score);}
}

2️⃣调用类:

package src.com.wang.test;public class Student2Test {public static void main(String[] args) {// 创建对象Student2 stu = new Student2();// 通过 setter 方法赋值(不是直接访问属性)stu.setName("李四");stu.setAge(20);stu.setScore(88.5);// 通过 getter 方法访问属性System.out.println("姓名: " + stu.getName());System.out.println("年龄: " + stu.getAge());System.out.println("成绩: " + stu.getScore());// 调用打印方法stu.printInfo();}
}

3️⃣运行结果:

姓名: 李四
年龄: 20
成绩: 88.5
学生姓名: 李四
学生年龄: 20
学生成绩: 88.5

封装的关键点:

项目说明
private用于修饰属性,使外部无法直接访问
public 方法getXxx()setXxx() 方法是访问属性的唯一通道
控制数据合法性可在 setter 方法中添加判断逻辑

文章转载自:
http://argenteous.hfstrb.cn
http://capric.hfstrb.cn
http://bibliotics.hfstrb.cn
http://astraea.hfstrb.cn
http://caithness.hfstrb.cn
http://base.hfstrb.cn
http://beggar.hfstrb.cn
http://aghan.hfstrb.cn
http://astable.hfstrb.cn
http://cervicitis.hfstrb.cn
http://ariadne.hfstrb.cn
http://approving.hfstrb.cn
http://aomen.hfstrb.cn
http://aloft.hfstrb.cn
http://asserted.hfstrb.cn
http://admiralty.hfstrb.cn
http://blest.hfstrb.cn
http://achilles.hfstrb.cn
http://banefully.hfstrb.cn
http://associationism.hfstrb.cn
http://authoress.hfstrb.cn
http://boyhood.hfstrb.cn
http://acme.hfstrb.cn
http://bilharziasis.hfstrb.cn
http://badderlocks.hfstrb.cn
http://agedly.hfstrb.cn
http://cacotopia.hfstrb.cn
http://assayer.hfstrb.cn
http://aeroembolism.hfstrb.cn
http://calibration.hfstrb.cn
http://www.dtcms.com/a/280833.html

相关文章:

  • Samba配置使用
  • 算法学习笔记:23.贪心算法之活动选择问题 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 重学前端005 --- 响应式网页设计 CSS 盒子模型
  • Python函数进阶
  • python 基于 httpx 的流式请求
  • 封装---统一处理接口与打印错误信息
  • Linux下调试器gdb/cgdb的使用
  • Linux系统调优和工具
  • [面试] 手写题-对象数组根据某个字段进行分组
  • mysql官网的版本历史版本下载
  • 令牌获取与认证机制详解
  • 关键点检测数据格式转换(.JSON转TXT)
  • 【超分论文精读】——LightBSR(ICCV2025)
  • 梳理Bean的创建流程
  • mongoDB的CRUD
  • Visual Studio 现已支持新的、更简洁的解决方案文件(slnx)格式
  • 云服务器如何管理数据库(MySQL/MongoDB)?
  • 基于STM32G431无刷电机驱动FOC软硬件学习
  • iOS高级开发工程师面试——常见第三方框架架构设计
  • C++学习笔记五
  • Gemma-3n-E4B-it本地部署教程:谷歌开源轻量级多模态大模型,碾压 17B 级同类模型!
  • SHAP 值的数值尺度
  • Conda 核心命令快速查阅表
  • 技术演进中的开发沉思-35 MFC系列:消息映射与命令
  • Keepalived双机热备
  • 网络安全职业指南:探索网络安全领域的各种角色
  • 003大模型基础知识
  • React 实现老虎机滚动动画效果实例
  • AutojsPro 9.3.11 简单hook
  • Pixel Reasoner:通过好奇心驱动的强化学习激励像素空间推理