【Java】/*类和对象(下)*/

目录

一、封装

1.1 初识封装 

1.2 如何封装成员变量 

1.3 如何使用封装后的成员变量

二、访问限定符

三、包

3.1 包的概念

3.2 如何自定义包

3.3 导入包中的类

3.4 包的访问权限控制举例

示例一:private修饰成员变量

示例二: 不去修饰成员变量

示例三:public修饰成员变量

注意:

3.5 常见的包

四、static成员

4.1 再谈学生类

4.2 static修饰成员变量

4.3 static修饰成员方法

4.4 static成员变量初始化

五、代码块

5.1 代码块概念以及分类

5.2 普通代码块

5.3 构造代码块

5.4 静态代码块

六、对象的打印


一、封装

1.1 初识封装 

1. 面向对象编程有三大特性:封装、继承、多态。

2. 在类和对象阶段,主要研究的就是封装特性。

3. 封装就相当于套上一层壳子屏蔽细节。这就好比像电脑这样一个复杂的设备,对于计算机使用者而言,不用关心内部核心部件,例如主板上线路是如何布局的,CPU内部是如何设计的等。用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可。

4. 封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互

1.2 如何封装成员变量 

1. 做法:用private修饰成员变量(private是私人的意思)。

2. 注意:修饰后的成员变量只能在当前类中使用。

1.3 如何使用封装后的成员变量

1. 做法:在类中给每个被private修饰的成员变量定义用public修饰的"set"、"get"方法,用于提供可对成员变量赋值和得到的接口。

2. 工具:编译器提供了可以快速生成"set"、"get"方法的开发工具,具体操作如下图

尝试使用一下这些"set"、"get"方法:

二、访问限定符

1. Java中主要通过类和访问权限来实现封装。类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:

2. ① 用private修饰的成员变量和成员方法,只能在自己所在的类中使用。

    ② 没有用任何访问限定符修饰的成员变量和成员方法,只能在同一个包中的类中使用。

    ③ protected主要是用在继承中,继承部分详细介绍。

    ④ 用public修饰的成员变量和成员方法,在所有类中只要声明包的路径都能使用。

3. 补充1:空权限指默认权限,这里的默认权限指的是包访问权限,即没有被任何访问限定符修饰的成员变量和成员方法,它只能在同一个包中的Java文件中使用。

4. 补充2:访问权限除了可以限定类中成员的可见性,也可以控制类的可见性。

三、包

3.1 包的概念

1. 介绍:在日常生活中你的U盘中有很多歌曲,为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件下,也可以对某个文件夹下的音乐进行更详细的分类。例如下图:我们可以把众多歌曲先按照歌曲类型分为4个大的文件夹,在每个大的文件夹下又可以按照歌曲属于哪个歌手分为一些小的文件夹。

同样在Java中如果你有很多的Java文件,对它们在电脑中进行管理我们也会去使用文件夹,文件夹在Java中又被称为包(每个文件夹都有属于自己的路径,即每个包也都有属于自己的路径。创建的Java文件所在的路径不同,所属于的包就不同)。

2. 特点:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可

3.2 如何自定义包

src是ideal默认的一个工程包。

自定义包的包名:① 全部小写 ② 一般情况下是域名的逆置写法,例如:域名是www.baidu.com,会写成com.baidu.www ( 这里相当于我们创建了三个包,路径分别是:com\、com\baidu\、con\baidu\www\ )

 设置好自定义包后,表现形式一般为下列两种,一般会采用第二种表现形式。

更改成第二种表现形式的设置步骤如下: 

下图中创建的两个名叫Student的Java文件并不冲突,因为一个是在com.baidu.www包下,另一个是在src包下。下面的图片2中,scr\代表scr包下的Student.java文件,www\代表www包下的Student.java文件。 

下图中用红色方框框起来的两个Student的Java文件也是不冲突的,因为第一个是在com.baidu.www包下,另一个在com.baidu.www2包下。

在自定义的包中建立的Java文件的第一行都会有一个package + 包名,这句代码的意义是声明这个Java文件所在的包的路径,例如:下图中第一行带码代表当前这个Java文件在包com.baidu.www下。如果Java文件是直接定义在默认的包src下,则Java文件的第一行是不会有package语句的。 

3.3 导入包中的类

写法一:采用导入包的形式 (一般采用这种形式)

我们平常在ideal中写代码时,直接在main方法中利用类即可,编译器会自动在当前的Java文件的头部导入这个类所在的包的路径或提供用户自己选择要导入哪个包中的类。

 写法二:不导入包的形式 (在利用类时,在类的前面写明它所在的包的路径)

当我们想要使用一个包中的多个类时,可以将导入包的格式写成,例如:import java.util.*,这里的*表示通配符的意思。这种写法表示"导入"了某个包中所有的类,这里的导入在Java中是你用到谁才会导入谁

虽然有上面这种简化的格式,但是仍然建议显示的指定要导入的类名,否则会很容易出现冲突的情况。 例如:下图中,java.util底下和java.sql底下都有Date这个类,当我们同时导入java.util.*和java.sql.*并且在main方法中在使用Date类时,编译器懵了不知道到底去使用哪个包中的Date类。 

上面情况的解决方法是: (在利用类时,在类的前面写明它所在的包的路径)

我们还可以使用import static导入包中静态的方法和字段,这样可以使得在使用某个类中的方法时,不用写类名直接调用方法 (这种写法的可读性非常差,不要使用!)

注意事项: import 和 C++ 的 #include 差别很大. C++ 必须 #include 来引入其他文件内容, 但是 Java 不需要. import 只是为了写代码的时候更方便,import 更类似于 C++ 的 namespace 和 using。

3.4 包的访问权限控制举例

示例一:private修饰成员变量

如下图,我们在scr\路径下创建了Student和test01,private的作用是使得被修饰的只能在自己的类中使用,因此我们在test01Java文件中使用Student类创建的对象时,会报错。

示例二: 不去修饰成员变量

如下图,我们在scr\路径下创建了Student,在com.baidu.www创建了test02。没有被任何访问限定符修饰的成员变量,只会有包访问权限,因此我们在test02Java文件中使用Student类创建的对象时,会报错。

示例三:public修饰成员变量

只要导入包后,在哪里都能使用。(这里就不详细举例了)

注意:

一般情况下成员变量设置为private,成员方法设置为public。

3.5 常见的包

1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。

2. java.lang.reflect:java 反射编程包;

3. java.net:进行网络编程开发包。

4. java.sql:进行数据库开发的支持包。

5. java.util:是java提供的工具程序包,(集合类等) 非常重要。

6. java.io:I/O编程开发包。

四、static成员

4.1 再谈学生类

下图中的代码,在我们利用学生类实例化三个学生对象时,既然大家都在同一个班,为什么要把班级的属性在每个对象的内存中都存一份浪费内存呢,有没有其他的写法?

答:有,可以将classRoom成员变量用static修饰。

4.2 static修饰成员变量

① 一个成员变量被static修饰后,那么此时这个成员变量就不属于对象了。

② 被static修饰的成员变量在内存中的存放位置将不再是堆区,而是在方法区 (用于存储已被虚拟机加载的类信息、常量、静态变量、以及编译器编译后的代码等数据) 。

③ 被static修饰的成员变量可以被所有实例化的对象所共用。

④ 被static修饰的成员变量,生命周期伴随类的一生(随类的加载而创建,随类的卸载而销毁)

⑤ 访问静态成员变量的方式有两种:第一种用对象的引用访问,第二种用类名访问(推荐)

⑥ 静态成员变量又称为类变量,它不依赖于对象。

4.3 static修饰成员方法

静态成员方法又称类方法

讨论一个问题:在下图代码中,为什么在静态方法中直接调用非静态方法会报错;而在非静态方法中直接调用非静态方法不会报错?

答:这是因为,在非静态方法中有一个隐形参数this,而在静态方法中并没有隐形参数this,对于非静态方法的调用又是依赖于对象的,因此如果直接在静态方法中调用非静态方法会报错。如果非要在静态方法中调用非静态方法,可以在静态方法中实例化对象了之后再调用非静态方法,如下面第二张图。如果是在静态方法中直接调用静态方法可以不用写类名,直接调用静态方法

总之:不能再类方法中,直接访问任何非静态的成员变量和成员方法

4.4 static成员变量初始化

1. 静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。

2. 就地初始化指:在定义时直接给出初始值。

3. 要讲清楚静态代码块初始化,那得先了解什么是代码块。

五、代码块

5.1 代码块概念以及分类

使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种:

① 普通代码块

② 构造块

③ 静态块

④ 同步代码块(后续讲解多线程部分再谈)

5.2 普通代码块

普通代码块:定义在方法中的代码块(这种用法较少见)

5.3 构造代码块

1. 定义在类的里面,方法的外面的代码块称为构造块/示例代码块/非静态代码块,可用于初始化非静态的成员方法(也可以初始化静态的成员方法)。

2. 讨论问题1:在下面的代码中,构造方法和构造块谁先执行?

答:构造块先执行。

3. 讨论问题2: 在下面的代码中,成员变量和构造块谁先执行?

答:取决于在代码中定义的顺序。(一般,我们在类中会先定义属性,再定义其他的方法)

 

5.4 静态代码块

1. 静态的所有都不依赖于对象。

2. 静态代码块,用于初始化静态的成员变量(不可以用于初始化非静态的成员方法)。

3. 根据下图代码的运行结果可以发现,静态代码块>>构造块>>构造方法

4. 静态成员变量和静态代码块谁先执行?答:和成员变量和构造块谁先执行一样,取决于在代码中定义的顺序(这里就不举例了)。

 

 

六、对象的打印

利用重写toString方法,可以在类中不自己定义show方法。

例如,如下代码中,如果我们想要打印成员变量的信息,就需要自己写show方法。

如何利用重写toString方法?

  本篇文章已完结,谢谢支持哟 ^^ !!!

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

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

相关文章

【排序算法】插入排序和希尔排序

制作不易,三连支持一下吧!!! 文章目录 前言一、插入排序的原理及实现二、希尔排序的原理及实现总结 前言 从这篇博客开始,我们将介绍几种常见的排序算法! 插入排序算法是希尔排序的基础,所以理…

QT5.15.2及以上版本安装

更新时间:2024-05-20 安装qt5.15以上版本 系统:ubuntu20.04.06 本文安装:linux-5.15.2 下载安装 # 安装编译套件g sudo apt-get install build-essential #安装OpenGL sudo apt-get install libgl1-mesa-dev# 下载qt安装器 https://downl…

Centos 7.9 使用 iso 搭建本地 YUM 源

Centos 7.9 使用 iso 搭建本地 YUM 源 1 建立挂载点 [rootlocalhost ~]# mkdir -p /media/cdrom/ 2 创建光盘存储路径 [rootlocalhost ~]# mkdir -p /mnt/cdrom/ 3 上传 CentOS-7-x86_64-Everything-2207-02.iso 到 光盘存储路径 [rootlocalhost ~]# ls /mnt/cdrom/ CentOS-…

echarts取消纵坐标,自定义提示内容,完整 echarts 布局代码

效果图 实现代码 开启点击柱子时的提示内容 //完整写法请看下面tooltip: {trigger: axis,axisPointer: {type: shadow}},自定义提示内容 //完整写法请看下面formatter: function (param) {// param是悬浮窗所在的数据(x、y轴数据)let relVal "&…

免费,Python蓝桥杯等级考试真题--第10级(含答案解析和代码)

Python蓝桥杯等级考试真题–第10级 一、 选择题 答案: 解析:range取首不取尾,即产生了数1234,list()函数可以把产生的数1234转化为列表,故答案为A。 答案:B 解析:sort&a…

【芯片IC】常见拆解欣赏 单片机、FPGA、RS232

1. Giga Devices GD32F103CBT6 2.Altera Cyclone EP1C3 is the smallest 1-st generation FPGA from Altera. 在多晶硅层面,我们可以看到每个 M4K 块被细分为两半(两列共 26 个 “矩形”)。逻辑元件阵列是非对称的,在阵列右侧正中…

jetcache缓存

1 介绍 是阿里的双极缓存,jvm-->redis-->数据库 文档:jetcache/docs/CN at master alibaba/jetcache GitHub 2 注意事项 使用的实体类一定实现序列化接口定时刷新注解,慎用 它会为每一个key创建一个定时器 :场景为&…

Node.js —— Express 中间件、接口编写、接口跨域 【0基础向Express模块学习】

目录 中间件的概念 什么是中间件 现实生活中的例子 Express 中间件的调用流程 ​编辑 Express 中间件的格式 next 函数的作用 Express 中间件的初体验 定义中间件函数 全局生效的中间件 定义全局中间件的简化形式 中间件的作用 ​编辑 定义多个全局中间件 局部生…

前端绘制流程节点数据

根据数据结构和节点的层级、子节点id&#xff0c;前端自己绘制节点位置和关联关系、指向、已完成节点等 <template><div><div>通过后端节点和层级&#xff0c;绘制出节点以及关联关系等</div><div class"container" ref"container&…

java面试框架篇(Spring常见问题、SpringBoot、SpringMVC、mybatis经典问题、SpringCloud组件)

文章目录 面试专题-java框架篇1. spring常见问题1.1. spring是什么?1.2. 谈谈你对AOP的理解1.3. 谈谈你对IOC的理解1.4. Spring Boot、 Spring MVC和Spring有什么区别1.5. spring bean 生命周期1.6. spring事务传播机制有哪些?1.7. 循环依赖1.8. spring框架中使用了哪些设计模…

vue3插槽solt 使用

背景增加组件的复用性&#xff0c;个人体验组件化还是react 方便。 Vue插槽solt如何传递具名插槽的数据给子组件&#xff1f; 一、solt 原理 知其然知其所以然 Vue的插槽&#xff08;slots&#xff09;是一种分发内容的机制&#xff0c;允许你在组件模板中定义可插入的内容…

Python 实现Word (DOC或DOCX)与TXT文本格式互转

目录 引言 安装Python库 使用Python将Word转换为TXT文本格式 使用Python将TXT文本格式转换为Word 引言 Word文档和TXT文本文件是日常工作和生活中两种常见的文件格式&#xff0c;各有其特点和优势。Word文档能够保留丰富的格式设置&#xff0c;如字体、段落、表格、图片等…

Java入门基础学习笔记42——常用API

API&#xff08;全称&#xff1a;Application Programming Interface&#xff1a;应用程序编程接口&#xff09; 就是Java自己写好的程序&#xff0c;给程序员调用&#xff0c;方便完成一些功能的。 为什么要学别人写好的程序&#xff1f; 不要重复造轮子。 开发效率高。 面…

YOLOv5改进 | 主干网络 | 用repvgg模块替换Conv【教程+代码 】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 尽管Ultralytics 推出了最新版本的 YOLOv8 模型。但YOLOv5作为一个anchor base的目标检测的算法&#xff0c;YOLOv5可能比YOLOv8的效果更好。…

2024电工杯数学建模选题建议及各题思路来啦!

大家好呀&#xff0c;2024电工杯数学建模竞赛开始了&#xff0c;来说一下初步的选题建议吧&#xff1a; 首先定下主基调&#xff0c; 本次电工杯建议选B。A题目难度较高&#xff0c;只建议有相关专业知识和优化经验的队伍选择&#xff0c;小白队伍无脑选B即可。是比较经典的数…

网页加载时,大图片文件如何分片加载,有示例代码。

浏览网页时候&#xff0c;碰到大图片半天加载不出来&#xff0c;急死人&#xff0c;本问分享一种分片加载的方式&#xff0c;其实还有其他方式&#xff0c;比如先模糊后清晰等。 一、为什么要分片加载 大图片文件可以通过分片加载来提高加载性能和用户体验。分片加载的基本思…

PointCloudLib 点云Ransac拟合平面功能实现 C++版本

0.实现效果 左图为原始点云,右图中的红色点为拟合平面所选取的点,绿色的点为拟合平面所抛弃的点 拟合出的结果是一个平面方程。 1.算法原理 RANSAC(Random Sample Consensus,随机样本一致性)算法在拟合平面时的工作原理可以概括为以下几个步骤: 随机选择最小样本集: R…

PTK密钥传递攻击

一. PTK密钥传递攻击原理 1. PTK介绍 PTK(Pass The key)&#xff0c;中文叫密钥传递攻击&#xff0c;PTH传递中&#xff0c;使用的是NTLM-HASH值&#xff0c;PTK使用 AES256或者AES128的方式进行传递,PTK 攻击只能用于kerberos认证中,NTLM认证中没有&#xff01; 2.PTK的原理…

官宣!正式成为淡人!向数据备份焦虑Say NO!

连轴转了十几天&#xff0c;想着终于要迎接美好的双休了&#xff0c;焦躁的心都变淡了。 但有时候压死骆驼的不是最后一根稻草&#xff1b; 当我终于剪好视频&#xff0c;满心欢喜导出时&#xff0c;却收到了一个令人沮丧的提示&#xff1a; “存储空间不足&#xff0c;请清…

本地连不上远程阿里云MySQL数据库,密码对就是连不上

三步解决 设置安全组&#xff1a; 设置防火墙&#xff1a; iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT设置root用户连接host&#xff1a; 终端登录mysql&#xff0c;然后&#xff1a; use mysql; select user,host from user where use…