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

由浅到深认识Java语言(11):封装

该文章Github地址:https://github.com/AntonyCheng/java-notes

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(10):面向对象

19.封装(面向对象第一大特性)

概念定义

问题的出现:封装就是让 Java 中的代码尽量完全还原现实世界,而不会造成与现实世界有冲突,这种冲突往往出现在直接对属性进行赋值的场景,也就是说,如果直接对属性进行赋值,而没有任何的约束条件,那么就很容易造成与现实世界不相符的冲突;

问题的解决:因此,通过封装来对属性赋值,对这一行为添加约束条件。换句话说,把对属性的操作放在一个方法里,那么这个过程就称为封装,此后属性不能直接访问,而必须通过方法来访问,此时就要用到private关键字;

封装的步骤:

  1. 私有化属性;
  2. 提供公共的方法来操作私有化属性;
  3. 在公共的方法里设置约束条件;

示例一:

为了解决用户输入的数字而造成误解,世界上基本没有奇数腿的动物,我们要消除该误解;

Animal 类:

package top.sharehome.BagOne;public class Animal {private int legs; // private ==> 私有的// 再提供一个公共的方法来操作私有的属性 ==> 封装的第一步public void setLeg(int legs) {if (legs % 2 != 0) {System.out.println("赋值失败,世界上没有奇数腿的动物!");} else {this.legs = legs;}}// 提供一个公共的方法来获取私有的属性public int getLeg() {return this.legs;}
}

demo 类:

package top.sharehome.BagOne;public class demo {public static void main(String[] args) {Animal a1 = new Animal();a1.setLeg(5);System.out.println("这只动物腿的数量是"+a1.getLeg());}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

示例二:

世界上的人,年龄是有限的,用封装解决如下;

Person 类:

package top.sharehome.BagOne;public class Person {private int age;public void setAge(int age) {if(age>130||age<0) {System.out.println("世界上不存在这样的人!");}else {this.age = age;}}public int getAge() {return this.age;}
}

demo 类:

package top.sharehome.BagOne;public class demo {public static void main(String[] args) {Person p = new Person();p.setAge(-9);System.out.println("你的年龄是"+p.getAge());}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在实际开发中的封装:

在做具体开发时,设计一个类,类中的属性往往要设置成私有的,并且提供公共的方法来操作属性,在公共的方法里封装具体的约束条件,这些公共的方法就是以后经常会提到的 getter 和 setter,比如:getXXX(){} setXXX(){}可以用快捷键

下一章:由浅到深认识Java语言(12):代码块&静态

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • stable diffusion 提示词进阶语法-年龄身材肤色-学习小结
  • C++类模板详解
  • 学习总结!
  • 用html画一个烟花特效
  • Java练习:进制转换、日期计算、乘法表两种实现
  • GPT4.0
  • 在linux中展示本月最后一个周五的日期
  • 【C语言进阶篇】编译和链接
  • C语言从入门到实战----数据在内存中的存储
  • ETH 智能合约Gas文章整理
  • JavaScript、ES6与微信小程序之间的联系:工具箱、升级与新房子
  • C语言:文件操作解析
  • 用go实现一个任务调度类 (泛型)
  • 回归预测 | Matlab基于SAO-LSTM雪消融算法优化长短期记忆神经网络的数据多输入单输出回归预测
  • springboot项目
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Git学习与使用心得(1)—— 初始化
  • js正则,这点儿就够用了
  • MD5加密原理解析及OC版原理实现
  • mysql外键的使用
  • React系列之 Redux 架构模式
  • SpringBoot几种定时任务的实现方式
  • 对象管理器(defineProperty)学习笔记
  • 关于字符编码你应该知道的事情
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 用简单代码看卷积组块发展
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • # 安徽锐锋科技IDMS系统简介
  • #### golang中【堆】的使用及底层 ####
  • #数据结构 笔记一
  • $refs 、$nextTic、动态组件、name的使用
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)vue-router+UI组件库
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (原创)可支持最大高度的NestedScrollView
  • (转)负载均衡,回话保持,cookie
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net6 webapi log4net完整配置使用流程
  • .net访问oracle数据库性能问题
  • /dev下添加设备节点的方法步骤(通过device_create)
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Async 异步注解使用
  • @Documented注解的作用
  • @ModelAttribute 注解
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [1159]adb判断手机屏幕状态并点亮屏幕