【Java基础篇 | 面向对象】—— 封装详解

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【JavaSE_primary】
本专栏旨在分享学习Java的一点学习心得,欢迎大家在评论区讨论💌
在这里插入图片描述

目录

  • 一、封装
    • 1.1什么是封装
    • 1.2访问修饰符
  • 二、封装拓展之包
    • 2.1包的概念
    • 2.2导入包中的类
    • 2.3自定义包
  • 三、static成员
    • 3.1static修饰成员变量
    • 3.2静态成员方法的访问
    • 3.3static成员变量的初始化
  • 四、代码块

一、封装

1.1什么是封装

封装概念将数据和对数据的操作封装在一个类中,对外部的访问只通过类提供的接口进行。

封装目的隐藏类的内部实现细节,只公开必要的方法来操作数据,避免数据被外部直接访问和修改,从而提高代码的安全性和可维护性。

那java是如何控制对数据的访问权限呢,答案是访问修饰符。通过访问修饰符,可以控制对数据的访问权限,以确保代码的安全性和封装性。

1.2访问修饰符

java中主要有以下四种访问修饰符:
加粗样式在这里插入图片描述

  • public:公共访问修饰符,可以被任何其他类或代码访问。
  • protected:受保护的访问修饰符,可以被同一包内的类、子类以及其他包中的子类访问。
  • default(默认):没有显式指定访问修饰符时,默认的访问修饰符,可以被同一包中的类访问。
  • private:私有访问修饰符,只能被所属类的内部访问。

二、封装拓展之包

2.1包的概念

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包

2.2导入包中的类

在Java中,你可以使用import关键字来导入其他包中的类。导入包中的类可以让你在当前文件中直接使用这些类而无需使用完整的包名来引用它们。

比如,我们想要导入java.util包中的Date类。即import java.util.Date

public class Test3 {public static void main(String[] args) {java.util.Date date = new java.util.Date();// 得到一个毫秒级别的时间戳System.out.println(date.getTime());}
}

这里如果需要使用 java.util 中的其他类,,可以使用 import java.util.*

需要注意的是:import java.util.*中的*代表导入‘java.util’包下的所有类,从而使所有类都可以在代码中直接使用。同时这里并不是一次性把java.util包下的所有类都导入进来,而是用到哪个类才导入哪个类(即用到谁导入谁)。

并不是只有 java.util包才有Date类,java.sql包中也是有Date类的。


2.3自定义包

在Java中,我们可以创建自己的包来组织和管理你的类文件。

创建和使用自定义包的一般步骤如下:

1.创建包目录结构:在我们的项目或源代码目录下,创建一个与我们的包名相对应的目录结构。例如,如果我们的包名是com.example.mypackage,那么你应该创建一个目录结构为com/example/mypackage的文件夹

2.编写类文件:在包目录结构下,创建你的类文件。例如,在com/example/mypackage目录下,你可以创建一个名为MyClass.java的文件,并在其中定义你的类。

3.声明包名:在你的类文件的开头,使用package关键字来声明你的包名。例如,在MyClass.java中,你可以添加如下的包声明:package com.example.mypackage;

4.导入和使用包中的类:如果你在另一个Java文件中想要使用你的包中的类,可以使用import语句导入该类。例如,如果你想在Main.java中使用MyClass类:

import com.example.mypackage.MyClass;public class Main {public static void main(String[] args) {MyClass myObject = new MyClass();// 使用myObject进行操作}
}

三、static成员

在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对
象,是所有对象所共享的。

举个例子,我们以学生类进行举例,现在有10个学生,这10个学生中都是在同一个班级,所以我们此时就不需要再学生类中写一个成员变量来保存学生所处的班级,我们可以把班级理解为这些学生的共同属性,即所有学生所共享的一个属性。所以我们当然不需要在每个学生类对象中都要存储一份这样的属性,因为这个班级属性是每个学生所共享的。

3.1static修饰成员变量

static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。

静态成员变量的特性如下:

  • 静态成员变量不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中。
  • 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  • 类变量存储在方法区当中
  • 静态成员变量的生命周期随类的加载而创建,随类的卸载而销毁

如果要为成员变量进行赋值的话,我们如下图可以直接为静态成员变量进行赋值即可。
在这里插入图片描述

3.2静态成员方法的访问

静态成员方法的访问是通过类名来进行访问的。
在这里插入图片描述

下面是静态成员方法的特性:

  • 静态成员方法不属于某个具体的对象,是类方法
  • 静态成员方法通过类名去进行访问,当然如果通过对象去访问也是可以的,只不过更推荐通过类名去进行访问
  • 不能直接访问静态方法中的任何非静态成员变量和非静态成员方法

综上,静态的无论是静态成员变量还是静态成员函数都是不依赖于对象的,它们都是可以通过类名去进行访问的。

3.3static成员变量的初始化

静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性
静态成员变量的初始化分为两种:就地初始化和静态代码块初始化

就地初始化:在定义时直接给出初始值。
请看举例:
在这里插入图片描述

代码块初始化:

四、代码块

使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种:
实例代码块、静态代码块、局部代码块、同步代码块

下面来看下述代码:

public class MyStudent {public String name;public int age;public int ID;public static String classes = "classone";{System.out.println("实例代码块");}static {System.out.println("静态代码块");}public MyStudent(){this("李华",18,123456);System.out.println("不带参数的构造函数");}public MyStudent(String name,int age,int ID){System.out.println("带参数的构造函数");this.name = "Daming";this.age = 21;this.ID = 123456;}public static void main(String[] args) {MyStudent s1 = new MyStudent();}
}

在这里插入图片描述

看下图代码的执行结果:
在这里插入图片描述
由此可以看出static修饰的成员变量在对象创建之前就已经创建完成了,所以static修饰的成员变量和成员方法加载的速度比较快。

实例代码块、静态代码块、局部代码块、同步代码块的执行顺序如下:

1.静态代码块:静态代码块首先在类加载时执行,只会执行一次,并在类加载后执行。用于初始化类的静态成员变量或执行其他静态初始化操作

2.实例代码块:实例代码块在每次创建对象时都会被执行。它在构造方法之前执行,并且不管调用哪个构造方法,都会执行实例初始化块。

3.构造方法(Constructor):构造方法用于创建对象并对实例变量进行初始化。构造方法的执行顺序由具体调用的构造方法决定。

4.局部代码块:局部代码块是在方法或条件语句内部定义的代码块。它在程序运行到该代码块时被执行。

5.同步代码块(Synchronized Block):同步代码块使用关键字包裹一段代码,用于实现线程同步。当线程进入同步代码块时,需要获取锁,其它线程需要等待锁释放才能执行。

注意事项如下:
1.静态代码块不管生成多少个对象,其只会执行一次
2.静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
3.如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
4.实例代码块只有在创建对象时才会执行

总之静态代码块只在类加载时执行一次,而实例代码块(在构造方法之前执行)在每次创建对象时都会执行。局部代码块和同步代码块在程序运行到相应的位置时才会执行。构造方法在创建对象时被调用,并且可以根据具体的构造方法决定执行顺序。

以上就是本文的全部内容。

好了,友友们,本文到这里就结束了,再见啦!!!

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

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

相关文章

thinkphp6 入门(4)--数据库操作 增删改查

一、设计数据库表 比如我新建了一个数据库表,名为test 二、配置数据库连接信息 本地测试 直接在.env中修改,不用去config/database.php中修改 正式环境 三、增删改查 引入Db库 use think\facade\Db; 假设新增的控制器路径为 app\test\control…

【操作系统】聊聊Linux内存工作机制

内存主要是用来存储系统和应用程序的指令、数据、缓存等 内存映射 内存是需要安全机制保护的,所以只有内核才可以直接访问物理内存。进程如果要访问内存需要通过独立的虚拟地址空间。 虚拟地址空间其实包含两部分。一部分是内核空间,另一部分就是用户…

[C++网络协议] I/O复用

具有代表性的并发服务器端实现模型和方法: 多进程服务器:通过创建多个进程提供服务。 多路复用服务器:通过捆绑并统一管理I/O对象提供服务。✔ 多线程服务器:通过生成与客户端等量的线程提供服务。 目录 1. I/O复用 2. select函…

BMS电池管理系统——什么是BMS(一)

BMS电池管理系统 文章目录 BMS电池管理系统前言一、BMS是什么?二、BMS的主要功能模块1.采样及测量功能2.状态估计及预测功能3.控制及管理功能4.通讯和诊断功能 总结 前言 作为一名电气专业的学生,大学里学了很多嵌入式相关的知识,首先要明确…

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示…

【前端】CSS-Grid网格布局

目录 一、grid布局是什么二、grid布局的属性三、容器属性1、display①、语句②、属性值 2、grid-template-columns属性、grid-template-rows属性①、定义②、属性值1)、固定的列宽和行高2)、repeat()函数3)、auto-fill关键字4)、f…

QT实现任意阶贝塞尔曲线绘制

bezier曲线在编程中的难点在于求取曲线的系数,如果系数确定了那么就可以用微小的直线段画出曲线。bezier曲线的系数也就是bernstein系数,此系数的性质可以自行百度,我们在这里是利用bernstein系数的递推性质求取: 简单举例 两个…

伪微分反馈控制(Pesudo-Drivative Feedback Control——PDF)

运动控制-单轴伺服控制带宽分析(二) - 知乎 (zhihu.com) 伪微分反馈控制_百度百科 (baidu.com) 伺服电机控制器的参数整定_老马过河hhh的博客-CSDN博客 伪微分PIIP控制_yukee10的博客-CSDN博客

【Linux成长史】Linux基本指令大全

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…

如何配置远程访问以在外部网络中使用公司内部的OA办公系统——“cpolar内网穿透”

文章目录 前言1. 确认在内网下能够使用IP端口号登录OA办公系统2. 安装cpolar内网穿透3. 创建隧道映射内网OA系统服务端口4. 实现外网访问公司内网OA系统总结 前言 现在大部分公司都会在公司内网搭建使用自己的办公管理系统,如OA、ERP、金蝶等,员工只需要…

Excel周报制作

Excel周报制作 文章目录 Excel周报制作一、理解数据二、数据透视表三、常用函数1.sum-求和2.sumif-单条件求和3.sumifs-多条件求和4.sum和subtotal的区别5.if函数6.if嵌套7.vlookup函数和数据透视表聚合8.index和match函数 四、周报开发五、报表总览 一、理解数据 这是一个线上…

在linux上挂载windows共享目录

挂载要求 非root用户(普通用户)能够读写windows共享目录,比如查看文件、创建文件、修改文件、删除文件 # 让普通用户也可以正常读写 uidvalue and gidvalue Set the owner and group of the root of the file system (default: uidgid0, bu…

Kafka的文件存储与稀疏索引机制

![在这里插入图片描述](https://img-blog.csdnimg.cn/dde7fc866d214985baaa87300a472578.png)这些是存储在分区(分区才是实际的存储)文件中的. seg是逻辑概念 而实际由log存储的. index是偏移量索引而timeindex是时间戳索引 log就是seg 找数据就是先找log 再从log去找

YOLOV7改进-添加P2和P6检测层(以YOLOV7-Tiny为例)

下载三个配置文件地址 1、加p6 1、配置文件添加 2、让它自己利用k-means算法进行聚类 3、如果从8或9出来,在这里改 完整

java和js实现MD5加密

java import java.security.MessageDigest;public class Demo2 {public static void main(String[] args) {Demo2 demo2 new Demo2();String encry demo2.md5("admin");System.out.println("加密后:" encry);}/*** md5加密*/private static…

webrtc 的Bundle group 和RTCP-MUX

1,最近调试程序的时候发现抱一个错误 max-bundle configured but session description has no BUNDLE group 最后发现是一个参数设置错误 config.bundle_policy webrtc::PeerConnectionInterface::BundlePolicy::kBundlePolicyMaxBundle; 2,rtcp-mu…

Scrum工作模式及Scrum工具

Scrum工作模式是一种敏捷软件开发方法,其核心是团队合作和自我组织,旨在通过短周期的迭代开发,实现快速反馈和持续改进。 Scrum工作模式包括以下角色和活动: 1、产品负责人(Product Owner):负…

Cesium 根据鼠标点击生成点击点的坐标信息

Cesium 根据鼠标点击生成点击点的坐标信息 一、需求二、分析1. 创建鼠标点击事件2. 点击生成坐标但不是经纬度,而是笛卡尔坐标系下的坐标,这个时候需要做一次转换3. 完整代码 三、数据保存 一、需求 在日常开发中 ,会遇到根据鼠标点击生成对应…

【数据仓库基础(二)】数据仓库架构

文章目录 一. 基本架构二. 主要数据仓库架构1. 数据集市架构1.1. 独立数据集市1.2. 从属数据集市1.3. Inmon企业信息工厂架构 2. Kimball数据仓库架构3. 混合型数据仓库架构 三. 操作数据存储(ODS) 一. 基本架构 架构是指系统的一个或多个结构。结构中包…

echarts饼图label自定义样式

生成的options {"tooltip": {"trigger": "item","axisPointer": {"type": "shadow"},"backgroundColor": "rgba(9, 24, 48, 0.5)","borderColor": "rgba(255,255,255,0.4)&q…