【JAVA】十、基础知识“类和对象”干货分享~(三)
目录
1. 封装
1.1 封装的概念
1.2 访问限定符
public(公开访问)
private(私有访问)
1.3 包
1.3.1 包的概念
1.3.2 导入包中的类
1.3.3 自定义包
2. static成员
2.1 static变量(类变量)
2.1.1 static修饰成员变量
2.2 static方法(类方法)
2.2.1 static修饰成员方法
2.3 static成员变量初始化
3. 代码块
3.1 代码块概念以及分类
3.1.1 普通代码块(少用)
3.1.2 构造代码块(实例代码块)
3.1.3 静态代码块

1. 封装
1.1 封装的概念
在 Java 中,面向对象程序三大特征:封装,继承,多态。而封装是面向对象编程(OOP)的核心概念之一,它的核心思想是将数据(属性)和操作数据的方法(行为)捆绑在一起,并隐藏对象的内部实现细节,仅对外公开可控的访问接口来和对象进行交互。简单来说就是套壳屏蔽细节啦~
并且封装通过限制对对象内部状态的直接访问,提高了代码的安全性、可维护性和灵活性。
1.2 访问限定符
Java 中的访问限定符用于控制类、成员变量、方法和构造方法的可见性,是实现封装的重要机制。共有四种访问修饰符:public、protected、默认、private。在这里博主先介绍public修饰符,再介绍private修饰符,剩下两个修饰符不做过多描述~
-
public(公开访问)
作用范围:所有类均可访问。
使用的场景:
对外暴露的接口或工具类(如
public class Main)。常量(如
public static final)。
public class Animal {public String name; // 任何类都可以访问
}
-
private(私有访问)
封装性:优先使用 private,通过公共方法控制访问。
作用范围:仅限于声明它的类内部。
使用场景:
封装类的内部状态(如私有字段)。
单例模式的私有构造方法。
public class Student {private String id; // 仅本类可以访问public String getId() { // 通过公共方法暴露出来return id;}
}
1.3 包
1.3.1 包的概念
在 Java 中,包是一种用于组织类和接口的命名空间机制。它类似于文件系统中的文件夹,里面存有很多文件,主要目的是避免命名冲突、控制访问权限。
为了更好的管理,把多个类收集在一起成为一组,称为软件包。
包有一个很重要的作用:不同包中可以存在相同名称的类,避免类名的冲突。
1.3.2 导入包中的类
下面这一段代码是输出数组的内容,我们通过这段代码来进行导入包中的类的讲解:
// 导入Arrays类(位于java.util包中)
import java.util.Arrays;public class Test3 { // 类名建议首字母大写public static void main(String[] args) {// 创建并初始化一个int数组int[] array = {1, 2, 3};// 使用Arrays类的静态方法toString()转换数组为字符串// 注意:Arrays是类名,Array是Java中的数组关键字,不要混淆System.out.println(Arrays.toString(array));// 输出 [1, 2, 3]}
}
- 导入包
使用 Arrays 类前需导入包:可以使用import语句导入包:
import java.util.Arrays; // 必须添加在代码开头
Arrays.toString(array)
Arrays是 Java 提供的工具类(位于java.util包),用于操作数组。toString()是它的静态方法,功能是将数组元素转换为可读的字符串格式。
System.out.println(Arrays.toString(array)) 这行Java代码的作用是将数组 array 的内容转换为字符串并输出到控制台。
如果直接打印数组对象 System.out.println(array),输出的是数组的哈希值(如 [I@1b6d3586),这时候没办法看到实际内容。
使用 Arrays.toString() 后,输出的是直观的数组元素[1, 2, 3]。
我们也可以使用import static导入包中的静态的方法和字段,后续代码中可以直接使用静态成员,无需通过类名调用。
// 使用静态导入:导入Arrays类中的toString方法
// 使得可以直接调用toString()而无需写类名Arrays
import static java.util.Arrays.toString;public class test3 {public static void main(String[] args) {// 定义一个int数组int[] array = {1, 2, 3};// 直接调用静态导入的toString方法,等价于Arrays.toString(array)System.out.println(toString(array));//输出[1, 2, 3]}
}
1.3.3 自定义包
选中src,右键点击 src 目录,点击New(新建),再点击Package(软件包),创名字(名字全小写),最后就创建好了包。
2. static成员
在之前的博客中我们举了学生类来进行相关知识点讲解,现在同样我们再用学生类举例:

上述三者都是成员变量。成员变量定义在方法的外部,类的内部。其中schoolName用static修饰之后,就不存在于对象当中了,而存在于方法区当中。
所有学生共享学校名称:每个学生对象都有自己的 name 和 age,但 schoolName 是所有学生共享的。修改一次,所有对象看到的都会变化。
直接通过类名访问:例如 Student.schoolName
2.1 static变量(类变量)
2.1.1 static修饰成员变量
用
static修饰的成员属于类本身(schoolName被static修饰)所有对象共享同一个static变量
示例中的
schoolName被所有Student对象共享静态成员变量访问方式:
类名.变量名(而非静态成员变量属于对象,访问方式是:引用.变量名)静态成员变量不依赖于对象,不用实例化都可以
2.2 static方法(类方法)
2.2.1 static修饰成员方法

- ②静态成员方法中,使用时也是不依赖于对象的
②静态成员方法无需实例化:可通过
类名.方法名()直接调用
changeSchool()通过类名调用(如Student.changeSchool("希望中学")),修改所有学生共享的schoolName- 在②静态成员方法里面,不能 直接 调用①非静态成员方法或成员变量,在
changeSchool()中尝试访问name或age会报错,因为static 方法中没有this引用
若是一定要在静态成员方法里调用的话,一定要通过对象的引用来调用!即:

完整代码如下:
public class Student {// 实例变量 - 每个学生对象独有的属性String name; // 学生姓名int age; // 学生年龄// static成员 - 属于类本身的属性(所有对象共享)static String schoolName = "阳光中学"; // 学校名称(所有学生相同)// 构造方法public Student(String name, int age) {this.name = name;this.age = age;}// 实例方法 - 需要创建对象后才能调用void showInfo() {System.out.println(name + "," + age + "岁,就读于" + schoolName);}// static方法 - 通过类名直接调用static void changeSchool(String newName) {schoolName = newName; // 修改所有学生共享的学校名称}
}// 测试类
public class Main {public static void main(String[] args) {// 访问static变量(不需要创建对象)System.out.println("当前学校:" + Student.schoolName);// 创建两个学生对象Student s1 = new Student("张三", 15);Student s2 = new Student("李四", 16);// 调用实例方法s1.showInfo(); // 张三,15岁,就读于阳光中学s2.showInfo(); // 李四,16岁,就读于阳光中学// 通过类名调用static方法修改学校名称Student.changeSchool("希望中学");System.out.println("\n修改后的学校信息:");s1.showInfo(); // 张三,15岁,就读于希望中学s2.showInfo(); // 李四,16岁,就读于希望中学// 再次直接访问static变量System.out.println("当前学校:" + Student.schoolName);}
}
2.3 static成员变量初始化
静态成员变量一般不会放在构造方法中初始化,构造方法里面初始化的是与对象相关的实例属性。
初始化方式分为两种:就地初始化和静态代码块初始化
就地初始化在定义时直接给出初始值:
static String schoolName = "阳光中学"; // 最常用的初始化方式
静态初始化我们在后面进行介绍
3. 代码块
3.1 代码块概念以及分类

如图,使用{ }定义的一段代码称为代码块。 可以分为四类:
- 普通代码块 构造块 静态块 同步代码块
3.1.1 普通代码块(少用)
- 在方法内部用
{ }包裹的代码块
void showInfo() {{ // 普通代码块开始int temp = 10;System.out.println("变量是:" + temp);} // temp变量在这里被销毁// System.out.println(temp); // 这里会报错,temp已经不可用啦
}
3.1.2 构造代码块(实例代码块)
- 类中直接使用
{ }包裹的代码块(不加修饰符)。也叫做实例代码块,构造代码块一般用于初始化实例成员变量,这个代码块在方法的外面,类的里面。 - 每次创建对象时自动执行,且在构造方法之前
public class Student {// 实例变量String name;int age;// ---------- 构造代码块 ----------{// 这个代码块会在每次创建对象的时候执行System.out.println("执行构造代码块");age = 10; // 为所有学生设置默认年龄10}// -----------------------------// 构造方法public Student(String name, int age) {System.out.println("执行构造方法");this.name = name;this.age = age; // 会覆盖构造代码块中的默认值}
}
3.1.3 静态代码块
- 使用
static { }包裹的代码块称为静态代码块。一般用于初始化静态成员变量。 - 类首次加载时执行,且仅仅执行一次
public class Student {static String schoolName;// 静态代码块static {System.out.println("静态代码块啦~");schoolName = "希望中学";}}
静态代码块只会执行一次,只要类被加载,就会被执行,而实例代码块一定是实例化对象的时候被执行。
若是三者都存在时,执行顺序:①静态代码块 ②实例代码块 ③不带参数的构造方法。
希望能帮到友友们的学习~
制作不易,更多内容加载中~感谢友友们的点赞收藏关注~~
如有问题欢迎批评指正,祝友友们生活愉快,学习工作顺顺利利!

相关文章:
【JAVA】十、基础知识“类和对象”干货分享~(三)
目录 1. 封装 1.1 封装的概念 1.2 访问限定符 public(公开访问) private(私有访问) 1.3 包 1.3.1 包的概念 1.3.2 导入包中的类 1.3.3 自定义包 2. static成员 2.1 static变量(类变量) 2.1.1 sta…...
DeepSeek+SpringAI家庭AI医生
文章目录 项目架构项目开发内容项目用户用例图项目地址开发环境大模型使用本地:Ollama部署DeepSeek离线与在线api大模型客户端使用 数据库脚本代码deepseek创建定制医生模型 内网互通原则云服务器类型 项目架构 项目开发内容 项目用户用例图 项目地址 FamilyAIDoct…...
PyTorch:解锁AI新时代的钥匙
(前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站)。 揭开PyTorch面纱 对于许多刚开始接触人工智能领域的朋友来说,PyTorch这个名字或许既熟悉又陌生。…...
C++第14届蓝桥杯b组学习笔记
1. 日期统计 小蓝现在有一个长度为 100100 的数组,数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4…...
解锁工业通信:Profibus DP到ModbusTCP网关指南!
解锁工业通信:Profibus DP到ModbusTCP网关指南! 在工业自动化领域,随着技术的不断进步和应用场景的日益复杂,不同设备和系统之间的通讯协议兼容性问题成为了工程师们面临的一大挑战。尤其是在Profibus DP和Modbus/TCP这两种广泛应…...
每日一题(小白)字符串娱乐篇16
分析题意可以了解到本题要求在一串字符串中找到所有组合起来排序递增的字符串。我们可以默认所有字符在字符串中的上升序列是1,从第一个字符开始找,如果后面的字符大于前面的字符就说明这是一个上序列那么后面字符所在的数组加一,如果连接不上…...
面试算法高频01
题目描述 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true示例 2: 输入: "race a car" 输出: falseimport…...
如何深刻理解Reactor和Proactor
前言: 网络框架的设计离不开 I/O 线程模型,线程模型的优劣直接决定了系统的吞吐量、可扩展性、安全性等。目前主流的网络框架,在网络 IO 处理层面几乎都采用了I/O 多路复用方案(又以epoll为主),这是服务端应对高并发的性能利器。 …...
java基础 数组Array的介绍
Array 数组定义一维数组多维数组动态数组常见方法Arrays排序1.sort() 排序 2.parallelSort() 排序 查找:binarySearch()填充:fill()比较:equals() 和 deepEquals()复制:copyOf() 和 copyOfRange()转换为列表:asList()转…...
Elixir语言的函数定义
Elixir语言的函数定义 Elixir是一种基于Erlang虚拟机(BEAM)的函数式编程语言,因其并发特性及可扩展性而受到广泛欢迎。在Elixir中,函数是程序的基本构建块,了解如何定义和使用函数对于掌握这门语言至关重要。本文将深…...
我的NISP二级之路-02
目录 一.数据库 二.TCP/IP协议 分层结构 三.STRIDE模型 四.检查评估与自评估 检查评估 自评估 五.信息安全应急响应过程 六.系统工程 七.SSE-CMM 八.CC标准 九.九项重点工作 记背: 一.数据库 关于数据库恢复技术,下列说法不正确的是:…...
k8s1.24升级1.28
0、简介 这里只用3台服务器来做一个简单的集群,当前版本是1.24.17目标升级到1.28.17 地址主机名192.168.160.40kuber-master-1192.168.160.41kuber-master-2192.168.160.42kuber-node-1 因为1.24已经更换过了容器运行时,所以之后的升级相对就会简单&am…...
常见的微信个人号二次开发功能
一、常见开发功能 1. 好友管理 好友列表维护 添加/删除好友 修改好友信息(备注、标签等) 分组管理 创建/编辑/删除标签 好友分类与筛选 2. 消息管理 信息发送 支持多类型内容:文本、图片、视频、文件、小程序、名片、URL链接等 附加功…...
unity的dots中instantiate克隆对象后,对象会在原位置闪现的原因和解决
原因 在Entity中有两个位置信息,一个是local transform。一个是local to world 其中local transform负责具体位置,local to world 负责渲染位置,即图像的渲染的位置是根据local to world的。 local to world 的更新是引擎自己控制的&#x…...
去中心化固定利率协议
核心机制与分类 协议类型: 借贷协议(如Yield、Notional):通过零息债券模型(如fyDai、fCash)锁定固定利率。 收益聚合器(如Saffron、BarnBridge):通过风险分级或博弈论…...
Java面试黄金宝典31
1. 什么是封锁协议 定义:封锁协议是在运用封锁机制时,为了保证事务的一致性和隔离性,对何时申请封锁、持锁时间以及何时释放封锁等问题制定的规则。它可防止并发操作引发的数据不一致问题,如丢失修改、不可重复读和读 “脏” 数据…...
R语言——绘制生命曲线图(细胞因子IL5)
绘制生命曲线图(根据细胞因子) 说明流程代码加载包读取Excel文件清理数据重命名列名处理IL-5中的"<"符号 - 替换为检测下限的一半首先找出所有包含"<"的值检查缺失移除缺失值根据IL-5中位数将患者分为高低两组 创建生存对象拟…...
在内网环境中为 Gogs 配置 HTTPS 访问
在内网环境中为 Gogs 配置 HTTPS 访问,虽然不需要公网域名,但仍需通过自签名证书或私有证书实现加密。以下是详细步骤和方案: 一、核心方案选择 方案适用场景优点缺点自签名证书快速测试、临时使用无需域名,快速生成浏览器提示“…...
神马系统8.5搭建过程,附源码数据库
项目介绍 神马系统是多年来流行的一款电视端应用,历经多年的发展,在稳定性和易用性方面都比较友好。 十多年前当家里的第一台智能电视买回家,就泡在某论坛,找了很多APP安装在电视上,其中这个神马系统就是用得很久的一…...
大模型论文:Improving Language Understanding by Generative Pre-Training
大模型论文:Improving Language Understanding by Generative Pre-Training OpenAI2018 文章地址:https://www.mikecaptain.com/resources/pdf/GPT-1.pdf 摘要 自然语言理解包括各种各样的任务,如文本蕴涵、问题回答、语义相似性评估和文…...
SDL视频显示函数
文章目录 1. **`SDL_Init()`**2. **`SDL_CreateWindow()`**3. **`SDL_CreateRenderer()`**4. **`SDL_CreateTexture()`**5. **`SDL_UpdateTexture()`**6. **`SDL_RenderCopy()`**7. **`SDL_RenderPresent()`**8. **`SDL_Delay()`**9. **`SDL_Quit()`**总结示例代码:代码说明:…...
[ctfshow web入门] web18
前置知识 js(javascript)语言用于前台控制,不需要知道他的语法是什么,以高级语言的阅读方式也能看懂个大概。 在JavaScript中,confirm()是一个用于显示确认对话框的内置函数,不用知道怎么使用。 信息收集 提示:不要…...
基于 docker 的 Xinference 全流程部署指南
Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。 一、下载代码 请在控制台下面执行…...
Vue组件化开发深度解析:Element UI与Ant Design Vue对比实践
一、Vue组件化开发的核心优势 1.1 组件化架构的天然优势 Vue的组件系统是其最核心的特性之一,采用单文件组件(.vue)形式,将HTML、CSS和JavaScript组合在同一个文件中,形成高内聚、低耦合的代码单元。这种设计显著提升…...
SQL Server查询性能下降:执行计划不稳定与索引优化
问题现象: SQL Server 2022 中某些关键查询性能突然下降,执行时间从毫秒级增至数秒,日志中未报错,但查询计划显示低效的索引扫描或键查找。 快速诊断 捕获实际执行计划: -- 启用实际执行计划 SET STATISTICS XML, TIME…...
【学Rust写CAD】31 muldiv255函数(muldiv255.rs,已经取消)
源码 // Calculates floor(a*b/255 0.5) #[inline] pub fn muldiv255(a: u32, b: u32) -> u32 {// The deriviation for this formula can be// found in "Three Wrongs Make a Right" by Jim Blinn.let tmp a * b 128;(tmp (tmp >> 8)) >> 8 }代…...
`uia.WindowControl` 是什么:获取窗口文字是基于系统的 UI 自动化接口,而非 OCR 方式
uia.WindowControl 是什么:获取窗口文字是基于系统的 UI 自动化接口,而非 OCR 方式 uia.WindowControl 通常是基于 Windows 系统的 UI 自动化框架(如 pywinauto 中的 uia 模块)里用于表示窗口控件的类。在 Windows 操作系统中,每个应用程序的窗口都可以看作是一个控件,ui…...
vue3 处理文字 根据文字单独添加class
下面写的是根据后端返回的html 提取我需要的标签和字 将他们单独添加样式 后端返回的数据 大概类似于<h1>2024年“双11”购物节网络零售监测报告</h1><p>表1 “双11” 期间网络零售热销品类TOP10</p> function checkfun(newList){if (newList) {let …...
Python爬虫教程011:scrapy爬取当当网数据开启多条管道下载及下载多页数据
文章目录 3.6.4 开启多条管道下载3.6.5 下载多页数据3.6.6 完整项目下载3.6.4 开启多条管道下载 在pipelines.py中新建管道类(用来下载图书封面图片): # 多条管道开启 # 要在settings.py中开启管道 class DangdangDownloadPipeline:def process_item(self, item, spider):…...
Jupyter Notebook不能自动打开默认浏览器怎么办?
在安装anaconda的过程中,部分用户可能会遇到,打开Jupyter Notebook的时候,不会弹出默认浏览器。本章教程给出解决办法。 一、生成一个jupyter默认配置文件 打开cmd,运行以下命令,会生成一个jupyter_notebook配置文件。 jupyter notebook --generate-config二、编辑jupyter_…...
