由浅到深认识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):代码块&静态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/483367.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mac vscode 命令行启动命令安装 别名设置方法

vscode 给我们提供了一个从命令行启动并打开vscode编辑器的shell脚本&#xff0c; 如 在vscode中打开当前文件夹&#xff0c;可以执行 code . 即可。 code命令安装方法&#xff1a; 打开vscode 使用 ctrl shift p 快捷键打开命令行窗口&#xff0c; 然后输入 shell comman…

人工智能之Tensorflow批标准化

批标准化&#xff08;Batch Normalization,BN&#xff09;是为了克服神经网络层数加深导致难以训练而诞生的。 随着神经网络的深度加深&#xff0c;训练会越来越困难&#xff0c;收敛速度会很慢&#xff0c;常常会导致梯度消失问题。梯度消失问题是在神经网络中&#xff0c;当前…

Redis的安装与启动

一、Linux环境安装&启动Redis 1. 安装步骤 第一步&#xff1a;在官网下载好Redis安装包&#xff0c;上传到Linux中并进行解压到相应&#xff08;如/opt/software/&#xff09;目录中&#xff1b;&#xff08;注意&#xff1a;完成了第二步后&#xff0c;即安装了C/C语言…

【动态规划】Leetcode 746. 使用最小花费爬楼梯

【动态规划】Leetcode 746. 使用最小花费爬楼梯 解法 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法 &#x1f612;: 我的代码实现> 动规五部曲 ✒️确定dp数组以及下标的含义 dp[i] 表示跳跃到第 i 层&#x…

Ubuntu Desktop - Updates (不升级到新版本)

Ubuntu Desktop - Updates [不升级到新版本] 1. UpdatesReferences 1. Updates System Settings -> Software & Updates -> Updates ubuntu-16.04.3-desktop-amd64.iso 不升级到新版本 ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

二叉树的遍历及线索二叉树试题解析

一、单项选择题 01.在下列关于二叉树遍历的说法中&#xff0c;正确的是( C ). A.若有一个结点是二叉树中某个子树的中序遍历结果序列的最后一个结点&#xff0c;则它一定是该子树的前序遍历结果序列的最后一个结点 B.若有一个结点是二叉树中某个子树的前序遍历结果序列的最后一…

基于springboot+vue的毕业就业信息管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Windows系统安装WampServer结合内网穿透实现公网访问本地服务

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

Java的三大特性之一——多态(完)

前言 http://t.csdnimg.cn/0CAuc 在上一篇我们已经详讲了继承特性&#xff0c;在这我们将进行最后一个也是最重要的特性讲解——多态 在讲解之前我们需要具备对向上转型以及方法重写的初步了解&#xff0c;这有助于我们对多态的认识 1.向上转型 即实际就是创建一个子类对象…

制作nuget包并上传到nuget.org

下面是一个详细的步骤指南&#xff0c;用于创建一个简单的 C# NuGet 包并将其发布到 NuGet.org。我们将创建一个简单的数学库作为示例。 步骤 1: 创建一个新的类库项目 首先&#xff0c;我们需要创建一个新的类库项目。这可以通过 Visual Studio 或者 .NET CLI 完成。 使用 …

P6维护:P6 数据库迁移Step by Step

前言 根据大家的近期给的提议&#xff0c;这里简单介绍如何迁移P6数据库&#xff0c;场景选取为从将P6从ORACLE迁移到SQLServer。 Oracle Primavera P6 PPM 以及 EPPM 均有其自带的migrate工具完成数据库迁移&#xff0c;整个操作也较为傻瓜式&#xff0c;只要有基本的数据库…

Swagger3/2+Spring boot 使用小结

一&#xff1a;前言 Swagger 是一个 RESTful API 的开源框架&#xff0c;它的主要目的是帮助开发者设计、构建、文档化和测试 Web API。Swagger 的核心思想是通过定义和描述 API 的规范、结构和交互方式&#xff0c;以提高 API 的可读性、可靠性和易用性&#xff0c;同时降低 A…

RIP,EIGRP,OSPF的区别

1.路由协议 能否选择出最优路径 2.路由协议 是否能够完成故障切换/多久能够完成故障切换 3.路由协议 是否会占用过大硬件资源 -- RIP -- 路由信息协议 跳数:一次三层设备的转发算一跳 中间隔的设备数量 不按照链路带宽来算 Rip认为路径一样,这个时候。 下面这个跳数不…

[NCTF2019]SQLi ---不会编程的崽

欸嘿&#xff0c;继续sql注入。又是新的sql注入类型 很直接哦&#xff0c;给出了sql查询语句。简单扫描一下&#xff0c;robots.txt还能访问。里边提示hint.txt $black_list "/limit|by|substr|mid|,|admin|benchmark|like|or|char|union|substring|select|greatest|%00…

Neo4j桌面版导入CVS文件

之后会出来一个提示框&#xff0c;而且会跳出相关文件夹&#xff1a; 然后我们将CSV文件放在此目录下&#xff1a; 我们的relation.csv是这样的 参见&#xff1a; NEO4J的基本使用以及桌面版NEO4J Desktop导入CSV文件_neo4j desktop使用-CSDN博客

[BT]BUUCTF刷题第4天(3.22)

第4天&#xff08;共3题&#xff09; Web [极客大挑战 2019]Upload 这是文件上传的题目&#xff0c;有一篇比较详细的有关文件上传的绕过方法文件上传漏洞详解&#xff08;CTF篇&#xff09; 首先直接上传带一句话木马的php文件&#xff0c;发现被拦截&#xff0c;提示不是图…

HTTP(2)

HTTP 通信过程包括从客户端发往服务器端的请求及从服务器端返回客户端的响应。 那么请求和响应是怎样运作的呢 HTTP 报文 用于 HTTP 协议交互的信息被称为 HTTP 报文。 请求端&#xff08;客户端&#xff09;的HTTP 报文叫做请求报文&#xff0c;响应端&#xff08;服务器…

BUUCTF-Misc12

[BJDCTF2020]纳尼1 1.打开附件 一张打不开的图片和一个没什么用的文本文档 2.010 Editor 用010 Editor 打开6.gif这个文件 发现文件头缺少 .gif 的文件头是47 49 46 38 添加文件头并保存 得到一个动图&#xff0c;由四张图片组成 得到一串看似像base64的编码&#xff1a;Q…

第六届“传智杯”决赛 流水账 | 珂学家

前言 整体评价 有幸参加了第六届的传智杯决赛(A组)&#xff0c;因为这个比赛是牛客协办&#xff0c;所以就写在这里。 作为Java选手&#xff0c;比赛中其实吃亏了&#xff0c;主要是T2吃了一发TLE&#xff0c;T4吃了一发莫名其妙的MLE。 顺便吐槽下T3&#xff0c;自测反馈WA…

鸿蒙ArkUI【开发移植Carbon】

项目介绍 本项目是基于开源项目[Carbon] 进行harmonyos化的移植和开发的。 移植版本&#xff1a;Branches/master 这不是单纯只是API和基本功能展示demo&#xff0c;它是最有用的自定义控件的实现&#xff0c;如设计规范中所示。 Carbon试图&#xff1a; 让事情变得更简单&…