看似封装,其实不止于封装?

本文介绍的也不只是封装,包含零零散散的知识点。其中,主要介绍封装、包和访问限定符、static、代码块

提示:使用PC端观看,效果更佳! 

目录

一、封装

1.为什么要封装

2.怎么封装

3.怎么访问被封装的数据 

4.封装的一些注意事项

二、访问限定符和包

1.怎么创建包

2.访问限定符

3.包的优点

三、修饰符static

1.static是什么

2.被static修饰后如何访问

3.static修饰方法

4.注意事项

5.static和非static的总结

四、代码块

1.代码块简单概述

2.普通代码块

3.构造代码块

4.静态代码块

5.两种代码块的执行顺序


一、封装

 封装是作为面向对象语言之一的特征,下面我们一起来认识

1.为什么要封装

(1)什么是封装

洗衣机举例

  • 如我们使用的洗衣机,我们只需要会开关鸡,调节一些选项(洗衣温度和时间等),放洗衣粉或洗衣液即可。
  • 内部的细节,如洗衣机怎么运转,怎么脱水等,不需要我们知道
  • 用一些手段把内部细节隐藏起来(如套上外壳),这就是封装的思想

(2)为什么要?

例如我们使用的电脑,用户更多关心的是外观,才不会在意内部零件的颜值和长相是怎么样的,也不想看到,所以厂家就会使用电脑壳将内部的细节给封装起来,这就是封装。

我们Java的类中也需要这样的做法,用来屏蔽一些内部功能实现的细节。

2.怎么封装

(1)使用关键字:private

(2)示例:一般都是public和private的相互选择

class Dog {
    public String name;//没有进行封装
    private int age;//使用了private进行了封装
}
public class Test2 {

    public static void main(String[] args) {

    }
}

3.怎么访问被封装的数据 

(1)封装前后的访问

可以直接使用对象的引用直接访问到对象中被public修饰的成员变量,却访问不到被private修饰的age 

(2)提供对外公开的接口

1)做法

第一步:鼠标右键或者Alt+Ins

第二步:点击框框中的

第三步:点击

第四步:生成了以下的代码 

调用get接口可以得到改成员变量的值;调用set接口则是可以给该成员方法赋值

(3)使用以上的接口

1)给private修饰的成员变量赋值

2)获得该成员变量的值

以上就是基本的访问方式

4.封装的一些注意事项

(1)我们是推荐:成员变量使用private封装,而成员方法对外开放

(2)使用封装时,要根据实际情况去设计,而不是滥用

二、访问限定符和包

包可以说是一种文件夹,一个包里面可以有很多个类

1.怎么创建包

(1)包是啥?

 下面的图样就是包的样子

(2)创建包

第一步:找到建包的入口

第二步:输入名字(包的阶级用点号隔开,位于后面的级别较高)

 第三步:形成三级目录

这样,三个包就创建好了。我们可以在不同包下创建类

2.访问限定符

下面是一些修饰符,在这里只介绍两个 

序号封装的范围privatedefaultprotectedpublic
1同一包中的同一类
2同一包中的不同类
3不同包中的子类
4不同包中的非子类

 (1)private

被这个修饰的字段,只能在同一个类中直接访问;一个包中的不同类,需要通过接口访问

(2)public

这个修饰符不用过多介绍,在任何地方都可以被访问到

3.包的优点

(1)合理创建包,可以更好的管理类和分类

(2)包是对类、接口等封装机制的体现

(3)一个包中的类可以防止被其他包使用

(4)在不同的包中,可以存在相同的类名

三、修饰符static

 同样是修饰符,但是static和像public的修饰符不是一类,他们可以一起使用,但是static是用来修饰成员变量或者成员方法的,存在于类中

1.static是什么

(1)static是用来修饰成员变量和方法的,称为静态的

(2)长什么样?

2.被static修饰后如何访问

(1)未被修饰的

在对象中,找不到被static修饰的classId变量

(2)作用机制

1)被static修饰的成员变量和成员方法,不属于对象,而是属于类

2)被static修饰的变量和普通的成员变量位于内存中的不同区域

3)静态成员变量和方法也被称为类变量和类方法

(3)如何访问

因为不属于对象而是属于类,所以访问可以不借助对象来访问,可以直接通过类来访问。

1)类名直接访问

2)对象引用访问(不推荐,但是会警告)

3.static修饰方法

(1)示例

(2)访问

(3)互访机制

1)静态方法中不可以访问非静态的

2)非静态中可以访问静态的

一个不需要对象的,不能调用需要对象的;反之可以

4.注意事项

(1)在static修饰的方法中,不能出现非静态成员变量和成员方法

(2)在static的方法中,不能出现this。this后面一般都要跟着对象

(3)

5.static和非static的总结

(1)成员变量分为:静态成员变量和非静态成员变量/普通成员变量;同样,成员方法分为:静态成员方法和非静态成员方法。

(2)静态成员变量:属于类的,只有一份;类名+点号来访问静态成员变量

(3)非静态成员变量/普通成员变量:属于对象的,每实例化一个对象,都会存在一份;通过对象的引用+点号来访问

(4)静态的成员变量  随着类被加载而创建。类被销毁而销毁

四、代码块

本节讲述三种代码块,下面跟我一起了解 

1.代码块简单概述

 (1)代码块一共有这四种:普通代码块、构造代码块、静态代码块和同步代码块,但是同步代码块在目前阶段是不会接触到的,所以这里不做讲解。

(2)什么是代码块

一般使用花括号({})括起来的部分称为代码块,又根据代码定义的位置和使用的关键字,就可以将代码块分类,也就是上述的四种。

2.普通代码块

(1)一般定义在方法中的代码块,就是普通代码块,用法较少

(2)样式

1)

 2)

(3)局限性

括号中的变量只能在代码块内部使用,出了作用域就不存在

3.构造代码块

(1)构造代码块,又称为示例代码块。定义在类中

(2)作用:用于给类中的成员变量初始化

(3)示例:

运行结果:

4.静态代码块

(1)使用static关键字定义的代码块称为静态代码块

(2)作用:用于初始化静态成员变量(类变量)

(3)示例:

运行结果:

5.两种代码块的执行顺序

上述对代码块有了初步的认识,下面针对实例代码块、静态代码块、构造方法进行比较,实例、静态和构造分别在父类和子类中的执行顺序。

(1)实例代码块、静态代码块和构造方法的执行顺序

执行顺序展示:

由此可知:静态代码块>实例代码块>构造方法

(2)分别在父子类中比较

执行顺序展示:

静态代码块一定是最先被执行的。

(3)静态代码块执行次数

结果展示:

(4)多个静态代码块

1)赋值

 结果:

前面的结果会被覆盖掉

 2)其他

结果:

(4)关于静态代码块的小结

1)无论实例化多少次对象,静态代码块都只会被执行一次

2)类变量是在JVM加载类时,就已经被初始化好了

3)多个静态代码块,在编译时,会将其合并。后面的会将前面的覆盖

4)而实例化代码块,只有在创造对象时才会被执行


本期的代码到这里就全部结束了,欢迎补充留言……

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

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

相关文章

必知必会干货!Python正则表达式常用函数

1.正则表达式 正则表达式:是一个特殊的字符序列,计算机科学的一个概念,主要用来检索/替换哪些符合某个模式的文本 在python中使用正则表达式,主要是借助re模块来实现 ​特点 灵活性/功能性/逻辑性非常强 可以使用极其简单的方法…

【NTN 卫星通信】 车辆物联网设备通过NTN和TN切换的应用场景

1 场景描述 对于有两个3GPP无线接入网服务的大面积农田和农场,物联网设备可以通过NTN和TN接入网同时受益于5G系统的双转向数据连接能力。   在这个用例中,我们有一个广域的农业自动化应用系统来控制农业车辆,例如,一个装有数百个…

二分查找算法(1)

算法介绍 二分查找适用范围不止是有序数组,很多有“二段性”的数组其实都可以使用二分查找,什么是“二段性”呢?在数组中,我们查到某个数不符合条件后,就可以排除它之前或之后的所有数据,这种性质就叫做“…

【Linux】盘点广义层面上【三种最基本的进程状态】

前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

119.设计链表(力扣)

代码解决 class MyLinkedList { public:// 定义链表节点结构体struct LinkedNode {int val;LinkedNode* next;LinkedNode(int val):val(val), next(nullptr){}};MyLinkedList() {dummyhead new LinkedNode(0);size0;}int get(int index) {if (index > (size - 1) || index…

分布式文件存储与数据缓存(二)| Redis

目录 Redis概述_什么是NoSQLNoSQL的四大分类KV型NoSql(代表----Redis)列式NoSql(代表----HBase)文档型NoSql(代表----MongoDB)搜索型NoSql(代表----ElasticSearch) 关系型数据库和非…

刷力扣看见一个寻找单身狗的问题?【力扣题解】

今天刷力扣遇到一道有意思的题目,题目是写着撞色问题177 ,当我写完这个题去看看有什么好的解题方式的时候,看见一个有趣的题解问题,他对这个题目的描述是几对情侣,带几个单身狗出去玩,然后现在我们要把这几…

使用Laravel开发项目

如何使用Laravel框架开发项目 一、安装Laravel框架 1.在安装Laravel框架钱我们需要先查看要安装的Laravel框架版本以及版本所需要的安装运行条件。 2.配置好安装环境后再安装Laravel框架 2.1.配置安装环境 1)PHP版本 2)PHP OpenSSL扩展 3&#xff…

详解隐私计算框架及技术要点

隐语架构一览 为什么这样分层? 完备性透明性开放性 隐语架构解析 产品层 算法层 隐语PSI特点 PIR Data Analysis SCQL 核心特性 联邦学习 特色 计算层 SPU 核心 HEU 同态加密设备 TEEU 密码原语 资源层 kuscia 互联互通 跨域管控 最后

软件工程-第三版王立福-第1章 绪论

本书结合IEEE最新发布的软件工程体系SWEBOK,和IEEE/ACM软件工程学科小组公布的软件工程教育知识体系SEEK,北大本科生指定教材。注重基础知识的系统性,选材的先进性及知识的应用。2009年出版 软件开发本质的认识,两大技术问题&…

计算机缺失xapofx1_5.dll如何修复?分享多种修复方法轻松搞定

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是xapofx1_5.dll丢失。丢失xapofx1_5.dll文件对电脑系统及运行程序的影响是多方面的,某些依赖于xapofx1_5.dll文件的特定软件或应用程序可能无法启动或运行过程中出现崩溃现象&…

上位机图像处理和嵌入式模块部署(qmacvisual脚本编辑)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 个人认为qmacvisual软件中,另外一个鲜明的特色,就是它本身支持javascript脚本编写,虽然是利用qt script engine…

Java基础 学习笔记九

for循环 for循环语句的语法结构 for(初始化表达式;条件表达式;更新表达式){循环体;}初始化表达式最先被执行,而且只执行一次条件表达式的执行结果必须是一个布尔类型的值更新表达式一般是负责更新某个变量值的(只有更新了某个变量值,条件表达…

codeforces 1600分

文章目录 1.[G. Special Permutation](https://codeforces.com/problemset/problem/1352/G)2.[D. Constructing the Array](https://codeforces.com/problemset/problem/1353/D)3.[C2. k-LCM (hard version)](https://codeforces.com/problemset/problem/1497/C2)4.[C. Circle …

7.【Linux】进程间通信2(共享内存||消息队列)

共享内存 介绍 1.共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。 2.当共享内存创建出来后,通过系统调用挂接到…

软件工程-第9章 软件工程项目管理概述

9.1 软件工程管理活动 9.2 软件规模、成本和进度估算 9.3 能力成熟度模型CMM 9.4 ISO 9000系列标准简介 9.5 CMM与ISO 9000系列标准的比较 9.6 本章小结

安装MySQL5.7.19 + 解决数据库乱码

文章目录 1.删除mysql服务 sc delete mysql2.解压到D:\mysql5.7下3.配置管理员环境变量4.D:\mysql5.7\mysql-5.7.19-winx64下创建my.ini1.创建文件2.文件内容 5.管理员打开cmd,切换到 D:\mysql5.7\mysql-5.7.19-winx64\bin6.输入 mysqld -install 安装mysql服务7.初…

python 中怎样使用任意关键词实参?

在 Python 中,可以使用任意数量的关键字实参和任意关键字实参,也被称为 kwargs。 这允许你在函数调用时传递任意数量的关键字参数。 你可以使用任意数量的关键字实参(Keyword Arguments)和任意关键字实参(Arbitrary Ke…

LeetCode每日一题——最后一个单词的长度

最后一个单词的长度OJ链接:58. 最后一个单词的长度 - 力扣(LeetCode) 题目: 思路 : 统计字符串中最后一个单词的长度,那么我们可以定一一个指针,从后向前开始统计,当指针指向的元素…

C语言-----冒泡排序

今天,让我们来学习一下C语言中一个简单的排序算法------冒泡排序。 什么是冒泡排序呢? 冒泡排序是C语言中一个可以将一个数组的内容按照升序或者降序进行重新排列的算法。简单来说,是一种排序的思维。 冒泡排序的核心思想:让同…