关于java的封装

关于java的封装

我们在前面的文章中,了解到了类和对象的知识,以及做了创建对象的时候对内存的分析,我们本篇文章来了解一下面向对象的三大基本特征之一,封装😀。

一、初识封装

封装就好比,我们把一些物品放在一个箱子里面,然后给箱子留一个缺口也可以把物品拿出来🤔。

结合现实生活中的方式也可以理解,最常见的就是我们敲代码的电脑,我们买来一个笔记本电脑,不需要自己去组装,厂家都已经把笔记本内部的一些复杂构造都封装好了,我们买回来开机就可以使用了,这个电脑也给外部留了一些接口,比如电源,usb插口等。

  • 该漏的漏,该藏的藏!

  • 我们程序的设计,应该遵循高内聚,低耦合

  • 高内聚:类的内部数据操作由自己完成,不允许外部干涉。

比如银行的钱,只能自己去管理,不允许外部人员参与管理,拒绝外部干涉。

  • 低耦合:仅暴露少量的方法供外部使用。

比如我们去银行取钱,只能用自己的银行卡区去取钱。

  • 属性私有:get / set

二、私有(private)

属性的私有就是,在类中进行修饰,把类中的属性变为私有的属性,不可以随意调用。

我们用代码的方式来说明一下,首先我们创建一个学生类,并且创建的属性和方法用private修饰。

package oop.Demo04;
//private:私有  public:公有
public class Students
{//姓名private String name;//学号private int id;//性别private String sex;//学习()private void study(){}
}

然后我们用main方法对这个类进行实例化。

package oop.Demo02;import oop.Demo04.Students;public class Application {public static void main(String[] args) {Students s1 = new Students();s1.name="";//这里不可以直接调用,编译器会报错提示,如下图。}
}

在这里插入图片描述

我们可以发现,如果我们的修饰符是公有的,那可以在创建完对象的时候,直接拿过来使用,但是我们定义的属性是私有属性,就没有权限拿过来使用。

我们如果想去使用,就需要提供一些可以操作这些属性的方法。

  • 提供一些 public 的 get 或者set方法。
  • get :获取这个属性。
  • set :给这个数据设置值。

三、get

package oop.Demo04;
//private:私有  public:公有
public class Students
{//姓名private String name;//学号private int id;//性别private String sex;//学习()private void study(){}//get方法 公有方法,可以直接调用。public String getName(){return this.name;}
}

四、set

package oop.Demo04;
//private:私有  public:公有
public class Students
{//姓名private String name;//学号private int id;//性别private String sex;//学习()private void study(){}//get方法 公有方法,可以直接调用。public String getName(){return this.name;}//set方法 公有方法,但是要有返回值类型public void setName(String name){this.name=name;}
}

五、get/set方法的调用

我们上面了解了两个方法,虽然这个类里面的属性都是私有的,但是有开放的方法,就好比是箱子的一个缺口,我们可以通过方法,来调用私有的属性,然后拿来使用😎。

package oop.Demo02;import oop.Demo04.Students;public class Application {public static void main(String[] args) {Students s1 = new Students();//创建对象是s1s1.setName("落满樱花的羊");//用set方法进行传参System.out.println(s1.getName());//用get方法进行获取输出}
}

我们执行一下代码,发现可以输出名字。

落满樱花的羊进程结束.......
  • 我们以后在定义属性的时候,基本上都会用private私有修饰符。
  • 我们写get / set 方法的时候也可以发现,比如setName,也是遵循驼峰规则的。
  • alt + ins 快捷键!!我们前面的文章说到他可以直接生成构造器,这个快捷键同样可以生成get set 方法,非常实用!😎

在这里插入图片描述

根据自己需要的属性去选择,就可以一键生成get和set方法。

六、get/set方法优化

我们再定义一个年龄的属性,age,但是我们知道,人的年龄是有上限和下限的,所以不能随意赋值,我们先看一下错误示范!

package oop.Demo04;
//private:私有  public:公有
public class Students
{//姓名private String name;//学号private int id;//性别private String sex;//年龄private int age;public String getName(){return this.name;}public void setName(String name){this.name=name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

我们这里定义好一个年龄的get set 方法,我们输出一个200岁。

package oop.Demo02;import oop.Demo04.Students;public class Application {public static void main(String[] args) {Students s1 = new Students();s1.setName("落满樱花的羊");System.out.println(s1.getName());s1.setAge(200);System.out.println(s1.getAge());}
}
落满樱花的羊
200进程结束......

我们可以看到,虽然我们可以正常输出,但是人没有200岁这个年纪🥲,方法是我们自己定义的,所以我们一样可以在封装的方法里面去优化,可以加一个判断。

    public void setAge(int age) {if (age>120 || age<0){this.age=1;}else{this.age = age;}}

我们再执行刚刚传参200的代码,就会发现,输出的结果是

落满樱花的羊
1进程结束......

七、封装的意义

  • 提供程序的安全性,可以保护数据。
  • 隐藏代码的细节,比如年龄设计。
  • 统一接口,所有的方法都是get set。
  • 提高了系统的可维护性,良好的封装可以便于我们更改内部代码。
  • 将数据的属性隐藏起来,禁止直接访问其中一个属性,需要通过接口去访问,也称之为信息隐藏。
  • 注意方法的重载,可以多去参考一下println方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统】1. 操作系统概述

文章目录 【 1. 什么是操作系统 】【 2. 操作系统软件的分类 】【 3. 操作系统内核的抽象和特征 】3.1 操作系统内核的抽象3.2 操作系统内核的特征 【 1. 什么是操作系统 】 操作系统是管理硬件资源、控制程序运行、改善人机界面和为应用软件提供服务的一种系统 软件。一个服务…

<软考高项备考>《论文专题 - 71 风险管理(3)》

3 过程2-识别风险 3.1 问题 4W1H过程做什么是识别单个项目风险以及整体项目风险的来源&#xff0c;并记录风险特征的过程。作用:1、记录现有的单个项目风险&#xff0c;以及整体项目风险的来源:2、汇总相关信息&#xff0c;以便项目团队能够恰当地应对已识别的风险。为什么做…

怎么修改或移除WordPress后台仪表盘概览底部的版权信息和主题信息?

前面跟大家分享『WordPress怎么把后台左上角的logo和评论图标移除&#xff1f;』和『WordPress后台底部版权信息“感谢使用 WordPress 进行创作”和版本号怎么修改或删除&#xff1f;』&#xff0c;其实在WordPress后台仪表盘的“概览”底部还有一个WordPress版权信息和所使用的…

项目解决方案:“ZL铁路轨行车辆”实时视频监控系统

目 录 一、建设背景 1.1 政策背景 1.2 现状 二、建设目标 三、建设依据 四、建设原则 4.1经济高效性 4.2系统开放性 4.3系统继承性 4.4系统扩展性 4.5系统经济性 4.6系统安全性 五、系统架构 5.1系统架构图 5.2技术架构 1、DVS 2、中心管理服务…

【Java SE语法篇】11.异常

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ 文章目录 1. 异常的概念和体系结构1.1 异常的概念1.2 异常体系…

PTA——7-31 三角形判断

7-31 三角形判断 (15分) 给定平面上任意三个点的坐标(x​1​​,y​1​​)、(x​2​​,y​2​​)、(x​3​​,y​3​​)&#xff0c;检验它们能否构成三角形。 输入格式: 输入在一行中顺序给出六个[−100,100]范围内的数字&#xff0c;即三个点的坐标x​1​​、y​1​​、x​2​…

SUKER书客重磅发布全新系列:书客Sun立式护眼台灯,护眼养眼新境界

近日&#xff0c;国内知名的光学国货品牌——SUKER书客在2024年新品发布上&#xff0c;正式发布了全新系列的书客Sun立式护眼台灯。 SUKER书客作为近年来快速发展的创新型光学技术品牌&#xff0c;曾推出的一系列产品都取得了刷新行业标准的成绩&#xff0c;他们坚持以创新为动…

【51单片机系列】单片机与PC进行串行通信

一、单片机与PC机串行通信的设计 工业现场的测控系统中&#xff0c;常使用单片机进行监测点的数据采集&#xff0c;然后单片机通过串口与PC通信&#xff0c;把采集的数据串行传送到PC机上&#xff0c;再在PC机上进行数据处理。 PC机配置的都是RS-232标准串口&#xff0c;为D型…

YOLOv5改进 | 2023主干篇 | 多种轻量化卷积优化PP-HGNetV2改进主干(全网独家创新)

一、本文介绍 Hello,大家好,上一篇博客我们讲了利用HGNetV2去替换YOLOv5的主干,经过结构的研究我们可以发现在HGNetV2的网络中有大量的卷积存在,所以我们可以用一种更加轻量化的卷积去优化HGNetV2从而达到更加轻量化的效果(亲测优化后的HGNetV2网络比正常HGNetV2精度更高…

开发知识点-java基础

java基础知识整理 windows 多版本java jar包不能直接打开 需要java -jar问题解决 windows 多版本 控制面板 java15 download 多版本 https://www.cnblogs.com/chenmingjun/p/9941191.html https://gitee.com/shixinke/JC-jEnv/repository/archive/master.zip java jar包不…

React16源码: React中的renderRoot的源码实现

renderRoot 1 &#xff09;概述 renderRoot 是一个非常复杂的方法这个方法里处理很多各种各样的逻辑, 它主要的工作内容是什么&#xff1f;A. 它调用 workLoop 进行循环单元更新 遍历整个 Fiber Tree&#xff0c;把每一个组件或者 dom 节点对应的Fiber 节点拿出来单一的进行更…

万户 ezOFFICE ezflow_gd.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

DC电源模块与AC电源模块的对比分析

DC电源模块与AC电源模块的对比分析 BOSHIDA DC电源模块和AC电源模块是两种常见的电源模块&#xff0c;它们在供电方式、稳定性、适用范围等方面有所不同&#xff0c;下面是它们的对比分析&#xff1a; 1. 供电方式&#xff1a; DC电源模块通过直流电源供电&#xff0c;通常使用…

【Linux】Linux 系统编程——which 命令

文章目录 1.命令概述2.命令格式3.常用选项4.相关描述5.参考示例 1.命令概述 which 命令用于定位执行文件的路径。当输入一个命令时&#xff0c;which 会在环境变量 PATH 所指定的路径中搜索每个目录&#xff0c;以查找指定的可执行文件。 2.命令格式 which [选项] 命令名3.常…

生产力与生产关系 —— 浅析爱泼斯坦事件 之 弱电控制强电原理

据网络文字与视频资料&#xff0c;爱泼斯坦事件是犹太精英阶层&#xff0c;为了掌控美国国家机器为犹太利益集团服务&#xff0c;而精心设下的一个局。本文先假设这个结论成立&#xff0c;并基于此展开讨论。 我们知道&#xff0c;弱电管理强电是电气工程中的一门专门学问&…

Mysql 数据库DDL 数据定义语言——数据库,数据表的创建

DDL&#xff1a;数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09;—Database Definition Language 1、登录数据库&#xff0c;输入用户名和密码 mysql -ufdd -p990107Wjl2、查看数据库 show databases;3、创建一个…

MySQL面试题 | 12.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

什么情况下物理服务器会运行出错?

​  物理服务器&#xff0c;也称为裸机服务器&#xff0c;一般可以提供高性能计算水平和巨大的存储容量。然而&#xff0c;它们也难免会遇到一些问题。运行出错时&#xff0c;可能会导致停机和数据丢失。在这篇文章中&#xff0c;介绍了常见的物理服务器在一些情况下显示出错…

【白话机器学习的数学】读书笔记(2)学习回归

二、学习回归 1. y y y与 f θ ( x ) f_\theta(x) fθ​(x) y y y 是实际数据x对应的值 f θ ( x ) f_\theta(x) fθ​(x)是我们构造出来的函数&#xff0c;例如 f θ ( x ) θ 0 θ 1 x f_\theta(x) \theta_0 \theta_1 x fθ​(x)θ0​θ1​x 所以我们希望这两个越接近&…

【视觉SLAM十四讲学习笔记】第五讲——相机模型

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元…