后端Java开发:第十二天
第十二天:封装 - 理解与应用
欢迎来到今天的学习内容!今天,我们将一起深入探讨 Java 中的 封装(Encapsulation)。封装是面向对象编程的四大基本特性之一,它的核心思想是把对象的状态(属性)和行为(方法)绑定在一起,并隐藏对象的实现细节,只暴露必要的接口给外部。这使得对象的内部状态不会被随意修改,同时保证了数据的安全性和代码的可维护性。
1. 什么是封装?
封装是一种将对象的状态和行为隐藏在对象内部的技术,外部无法直接访问对象的内部数据,只能通过 公开的接口(通常是方法)来操作数据。这种做法能够有效避免外部代码错误地修改对象的内部状态,并提供了一种更高层次的代码抽象。
封装主要包括以下几个方面:
- 属性私有化(private):将类的属性声明为私有,禁止外部直接访问。
- 提供公共的访问方法(getters 和 setters):通过方法(getters 和 setters)来访问和修改属性。
- 实现类的接口:通过公开的方法来提供给外部使用,而不直接暴露内部的实现细节。
2. 封装的好处
封装有很多好处,以下是几项关键优势:
- 数据保护:通过将数据设为私有,可以防止外部直接修改对象的属性,确保数据的安全性。
- 提高可维护性:如果需要更改属性的实现方式,只需要修改类内部的代码,而不需要修改外部的调用代码。
- 提高代码的复用性:通过提供接口方法,外部可以在不修改类的内部实现的情况下使用类的功能。
- 简化复杂性:通过封装内部实现,外部只需要关心接口的使用,而无需了解类的内部细节。
3. 如何实现封装?
在 Java 中实现封装通常通过以下步骤:
步骤 1:将类的属性设为私有(private)
私有化类的属性,避免外部直接访问或修改这些属性。
步骤 2:为每个属性提供公共的访问方法(getters 和 setters)
通过 get 和 set 方法允许外部读取和修改属性的值。get 方法用于获取属性的值,set 方法用于设置属性的值。
步骤 3:类的其他方法
提供其他功能性的方法,这些方法不直接暴露内部实现,但可以通过接口与外部交互。
代码示例:
public class Person {// 1. 将属性设为私有private String name;private int age;// 2. 提供公共的 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) {this.age = age;} else {System.out.println("Age must be greater than 0");}}// 3. 提供其他公共方法public void introduce() {System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");}public static void main(String[] args) {Person person = new Person();person.setName("Alice");person.setAge(30);person.introduce();}
}
输出:
Hello, my name is Alice and I am 30 years old.
4. 封装的实例分析
实例 1:银行账户类 - 提供存取款操作
我们用封装来设计一个银行账户类,这个类将拥有账户余额(balance)这个私有属性,并提供存款和取款的方法,同时加入一些验证逻辑,确保账户余额不能为负。
public class BankAccount {// 私有属性private double balance;// 公共的 getter 方法public double getBalance() {return balance;}// 公共的存款方法public void deposit(double amount) {if (amount > 0) {balance += amount;System.out.println("Deposited: " + amount);} else {System.out.println("Deposit amount must be greater than 0");}}// 公共的取款方法public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;System.out.println("Withdrew: " + amount);} else {System.out.println("Insufficient balance or invalid amount");}}public static void main(String[] args) {BankAccount account = new BankAccount();account.deposit(1000);account.withdraw(500);account.withdraw(600); // 失败,余额不足System.out.println("Current Balance: " + account.getBalance());}
}
输出:
Deposited: 1000.0
Withdrew: 500.0
Insufficient balance or invalid amount
Current Balance: 500.0
实例 2:学生类 - 姓名和成绩的封装
在此示例中,封装用于保护学生的成绩数据,只允许通过 get 和 set 方法进行访问,同时加入了成绩验证的逻辑,确保成绩不超过 100 分。
public class Student {private String name;private double grade;// 设置姓名public void setName(String name) {this.name = name;}// 获取姓名public String getName() {return name;}// 设置成绩public void setGrade(double grade) {if (grade >= 0 && grade <= 100) {this.grade = grade;} else {System.out.println("Grade must be between 0 and 100.");}}// 获取成绩public double getGrade() {return grade;}// 打印学生信息public void printInfo() {System.out.println("Student: " + name + ", Grade: " + grade);}public static void main(String[] args) {Student student = new Student();student.setName("Bob");student.setGrade(85);student.printInfo();}
}
输出:
Student: Bob, Grade: 85.0
5. 常见的封装误区
误区 1:不使用 getter 和 setter 方法
有些开发者会直接将类的属性设为公共的,这样虽然方便访问,但却会暴露内部实现,破坏封装的原则。
public class WrongPerson {public String name;public int age;public static void main(String[] args) {WrongPerson person = new WrongPerson();person.name = "Alice"; // 直接修改属性person.age = 30;System.out.println("Name: " + person.name + ", Age: " + person.age);}
}
建议:将类的属性设为私有,提供 get 和 set 方法,增强数据的保护性。
误区 2:忽视封装的其他方面
封装不仅仅是将属性设为私有,还应注意:
- 封装业务逻辑:确保类的行为逻辑都封装在类内部,外部只暴露必要的接口。
- 数据验证:在
set方法中加入数据验证逻辑,确保数据的合理性。
6. 总结
通过今天的学习,我们了解了 封装(Encapsulation) 的基本概念和应用。封装是面向对象编程中的一个重要特性,它帮助我们隐藏对象的实现细节,保护数据安全,并提高代码的可维护性。通过将属性私有化,并提供公共的 get 和 set 方法,我们可以更好地控制数据的访问和修改。
封装让我们能够确保代码的安全性、可靠性和简洁性。在实际开发中,封装不仅仅是访问控制,它还包含了对数据的验证、业务逻辑的封装等多个方面。
明天我们将继续探讨面向对象编程中的另一个重要特性——继承。敬请期待!
相关文章:
后端Java开发:第十二天
第十二天:封装 - 理解与应用 欢迎来到今天的学习内容!今天,我们将一起深入探讨 Java 中的 封装(Encapsulation)。封装是面向对象编程的四大基本特性之一,它的核心思想是把对象的状态(属性&…...
记录一下Coding一直不能clone
配置 下载git客户端,进行配置 git config --list user.name姓名全称 user.emailIAM_xxxxxx.com ,这个就是你的邮箱地址 user.signingkey 注册coding平台的密码 一般不需要配置公钥私钥 下载TortoiseGit,配置这几个参数 配置凭据管理器 注意 这里用户名是…...
LLM加速方法,Adapter Tuning和Prompt Tuning的区别及原理举例
LLM加速方法 目录 LLM加速方法整体结构各分支内容Adapter Tuning和Prompt Tuning的区别及原理举例一、区别二、总结整体结构 基于模型微调、基于模型压缩、基于分布式并行处理。 各分支内容 基于模型微调: 包含Adapter Tuning、Prompt Tuning、LoRA三个子类别。这些技术主要…...
【SVN】版本发布快捷操作
摘要:因为每次发版都需要制作一份相同的文件夹,而大部分的包都不需要变更,但是文件又非常大,记录自己的操作经验。 首先在SVN Repository Browser 界面把上一次的版本复制一份,复制的时候重命名为新的版本号 右击要复…...
GitLab 创建项目、删除项目
1、创建项目 点击左上角图标,回到首页 点击 Create a project 点击 Create blank project 输入项目名称,点击Create Project 创建成功 2、删除项目 进入项目列表 点击对应项目,进入项目 进入Settings页面 拖到页面底部,展开Adva…...
STM32-笔记37-吸烟室管控系统项目
一、项目需求 1. 使用 mq-2 获取环境烟雾值,并显示在 LCD1602 上; 2. 按键修改阈值,并显示在 LCD1602 上; 3. 烟雾值超过阈值时,蜂鸣器长响,风扇打开;烟雾值小于阈值时,蜂鸣器不响…...
VisionPro软件Image Stitch拼接算法
2D图像拼接的3种情景 1.一只相机取像位置固定,或者多只相机固定位置拍图,硬拷贝拼图,采用CopyRegion工具实现 2.一只或多只相机在多个位置拍照,相机视野互相重叠,基于Patmax特征定位后,无缝 拼图ÿ…...
【从零开始入门unity游戏开发之——unity篇09】unity6基础入门——Unity游戏对象和组件的本质、Unity中的反射机制
文章目录 一、Unity游戏对象和组件的本质1、开发游戏的本质2、万物之根本——空对象2.1 什么是空对象?2.2 创建空对象 3、Unity游戏对象的本质4、 transform组件4.1 transform组件的重要性4.2 修改transform的值4.4 **Transform的作用**4.3 重置transform的值 5、总…...
【Linux】深入理解文件系统(超详细)
目录 一.磁盘 1-1 磁盘、服务器、机柜、机房 📌补充: 📌通常网络中用高低电平,磁盘中用磁化方向来表示。以下是具体说明: 📌如果有一块磁盘要进行销毁该怎么办? 1-2 磁盘存储结构 编辑…...
MoEs and Transformers 笔记
ref:https://huggingface.co/blog/zh/moe#%E7%94%A8router-z-loss%E7%A8%B3%E5%AE%9A%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83 MoEs and Transformers Transformer 类模型明确表明,增加参数数量可以提高性能,因此谷歌使用 GShard 尝试将 Transformer 模型…...
在Linux中,如何禁用root用户直接SSH登录?
在Linux中禁用root用户的直接SSH登录是为了增强系统的安全性,因为允许root用户通过SSH远程登录会增加服务器被暴力破解的风险。以下是在Linux系统中禁止root用户直接SSH登录的步骤: 编辑SSH配置文件: 打开/etc/ssh/sshd_config文件ÿ…...
用Python实现简单的任务自动化
目录 1. 自动发送邮件提醒 2. 自动备份文件 3. 自动下载网页内容 总结 在现代工作和生活中,任务自动化可以极大地提高效率和准确性。Python,作为一种功能强大且易于学习的编程语言,是实现任务自动化的理想选择。本文将通过几个简单而实用的案例,展示如何用Python实现任…...
为AI聊天工具添加一个知识系统 之26 资源存储库和资源管理器
本文要点 资源存储库 为了能完成本项目(“为AI聊天工具增加一个知识系统”,其核心能力是“语言处理” ,该能力的最大挑战 当仁不让的应该是自然语言处理)的设计,我们考虑一个问题:在自然语言处理中&#…...
Windows10环境下安装RabbitMq折腾记
最近有个老项目需要迁移到windows10环境,用的是比较老的rabbitmq安装包,如下所示。经过一番折腾,死活服务起不来,最终果断放弃老版本启用新版本。现在把折腾过程记录下: 一、安装erlang 安装完成后的目录结构ÿ…...
对快速由表及里说拜拜/如何正确运用由表及里
你是不是还:看到一男子拖走一女子就以为小情侣吵架而已(可能人贩子);看到男友对你好个几次就从此死心塌地(可能有手就行,细节装装而已)结果耽误终身;看到女同事对你微笑不排斥就以为…...
spring mvc源码学习笔记之八
本文说点儿简单的。 如果你想研究基于 XML 配置的 spring mvc 的话,可以简单扫一眼本文。 在基于 XML 配置的 spring mvc 开发中,我们主要就是通过 spring 提供的各种标签来配置。 但是,大家是不是都有个疑问,spring 到底给我们提…...
探秘5网口IIOT网关
在当今这个科技飞速发展的时代,工业领域正经历着一场深刻的变革,而工业物联网网关在其中扮演着至关重要的角色。 什么是IIOT网关 工业物联网网关,简单来说,就是连接工业现场设备与云端或者上层管理系统的关键桥梁。 而明达技术研…...
左神算法基础巩固--5
文章目录 前缀树生成前缀树查询前缀树查询字符串加入过几次查询所有加入的字符串中,有几个是以pre这个字符串作为前缀 删除前缀树中的某个字符串 贪心算法解题 前缀树 生成前缀树 要想生成一棵前缀树,需要先创建一个根节点,这个根节点有26条…...
Python的Matplotlib库应用(超详细教程)
目录 一、环境搭建 1.1 配置matplotlib库 1.2 配置seaborn库 1.3 配置Skimage库 二、二维图像 2.1 曲线(直线)可视化 2.2 曲线(虚线)可视化 2.3 直方图 2.4 阶梯图 三、三维图像 3.1 3D曲面图 3.2 3D散点图 3.3 3D散…...
负载均衡服务器要怎么配置?
目录 一、概述: 二、硬件配置: 三、操作系统配置: 四、负载均衡软件: 五、网络配置: 六、软件安装步骤: 6.1 安装 Nginx 6.2 安装 LVS 6.3 安装 HAProxy 6.4 安装 Keepalived 一、概述࿱…...
BM25(Best Matching 25)信息检索
文章目录一、BM25本质在做什么二、核心思想(直观理解)1️⃣ 词出现次数(Term Frequency, TF)2️⃣ 词的稀有程度(IDF)3️⃣ 文档长度归一化三、BM25公式(核心)这是标准BM25打分函数&…...
2025届最火的降重复率助手解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 其核心在于模仿人类写作的自然特征,以此来降低AIGC检测率先,要调整词…...
小白程序员必备:收藏这份数据库入门指南,轻松掌握SQL大模型核心技能!
小白程序员必备:收藏这份数据库入门指南,轻松掌握SQL大模型核心技能! 本文详细介绍了数据库基础概念,包括数据库、DBMS、DBA等,并深入讲解了SQL语言分类(DDL、DML、DQL、DCL)。重点解析了DDL操作…...
PHP代码“带病上线”时代终结:2024最严GDPR/等保合规AI校验清单(仅限首批200名开发者获取)
第一章:PHP代码“带病上线”时代终结:合规校验的范式革命过去,PHP项目常因缺乏统一的静态分析、类型约束与安全策略而陷入“先上线、后修复”的被动循环。如今,随着 PHP 8.0 原生支持联合类型、属性类型声明、枚举及 JIT 编译&…...
HarmonyOS 6学习:ArkUI Text组件的数字翻牌动效
在移动应用开发中,数字展示的动态效果一直是提升用户体验的关键环节。无论是金融应用中的余额变动、电商平台的库存更新,还是体育赛事的实时比分,数字的动态变化都能有效吸引用户注意力并传递信息价值。以往在HarmonyOS中实现这类效果&#x…...
3月热门科技产品:功能亮点与市场潜力解析
三星Galaxy S26手机壳:轻薄与保护的完美结合在3月的热门产品中,Spigen Tough Armor MagFit三星Galaxy S26手机壳和Pitaka Edge三星Galaxy S26手机壳备受关注。Spigen的这款手机壳足够轻薄,不会让手机显得笨重,同时采用减震衬垫&am…...
反向跟单为什么总以失败告终?这正是大多数人转向复制跟单的真相
你知道什么是反向跟单吗?简单说,就是找到一批持续亏损的交易者,用专业跟单软件跟踪他们的操作,然后与他们做完全相反的交易——他们做多,你就做空;他们做空,你就做多。只要他们亏损多少…...
人事管理系统人才库:被90%企业忽视的招聘加速器,到底能带来什么?
人事管理系统中的人才库是企业集中存储、管理和激活候选人资源的核心模块,它将历史简历、内部员工档案和外部人才信息整合到统一平台中,帮助 HR 在有招聘需求时快速定位合适人选。 2026 年,随着 AI 技术深度嵌入人才库管理,企业平…...
整流器专题(2)【详细讲解】电网电压不平衡时PWM整流器控制:基于双电流功率平衡算法抑制二次谐波
整流器专题(2)【详细讲解】电网电压不平衡时PWM整流器控制:基于双电流功率平衡算法抑制二次谐波阅读前注意: 1、 此平台私信不回复,统一在b站回复,展示内容与b站一致,视频链接如下:https://www.…...
Applite终极指南:3分钟掌握macOS最优雅的Homebrew图形化管理工具
Applite终极指南:3分钟掌握macOS最优雅的Homebrew图形化管理工具 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为Homebrew的命令行操作而烦恼吗?…...
